
Spring ViewComponent は、型安全で再利用可能かつカプセル化されたサーバーサイドレンダリングUIコンポーネントを作成することを可能にします。
##### 目次
ViewComponentとは?
ViewComponentは、テンプレートに必要なロジックを単一のクラスに統合し、 理解しやすい一貫したオブジェクトを生み出します。 (出典: ViewComponent for Rails)
Spring ViewComponentは、テンプレートのコンテキストを定義するSpring Beanです:
Java
@ViewComponent
public class SimpleViewComponent { public record SimpleView(String helloWorld) implements ViewContext {
}
public SimpleView render() {
return new SimpleView("Hello World");
}
}
ViewContextインターフェースを実装するレコードを作成してコンテキストを定義します
次に、クラスに@ViewComponentアノテーションを追加し、SimpleViewレコードを返すメソッドを定義します
Kotlin
// SimpleViewComponent.kt
@ViewComponent
class SimpleViewComponent {
fun render() = SimpleView("Hello World") data class SimpleView(val helloWorld: String) : ViewContext
}
ViewComponentには常に対応するHTMLテンプレートが必要です。 テンプレートはSimpleViewComponent.[html/jte/kte]で定義します。ViewComponentクラスと同じパッケージに置きます。
Thymeleafを使用することもできます。
```html
// SimpleViewComponent.html
または JTE
html
// SimpleViewComponent.jte
@param de.tschuehly.example.jte.web.simple.SimpleViewComponent.SimpleView simpleView
または KTE
html
@param simpleView: de.tschuehly.kteviewcomponentexample.web.simple.SimpleViewComponent.SimpleView
This is the SimpleViewComponent
ViewComponentをレンダリングする
次に、コントローラーでrenderメソッドを呼び出してテンプレートをレンダリングできます。
Java
java@Controller public class SimpleController {
private final SimpleViewComponent simpleViewComponent;
public TestController(SimpleViewComponent simpleViewComponent) { this.simpleViewComponent = simpleViewComponent; }
@GetMapping("/") ViewContext simple() { return simpleViewComponent.render(); } }
Kotlin
kotlin
// Router.kt
@Controller
class SimpleController(
private val simpleViewComponent: SimpleViewComponent,
) {@GetMapping("/") fun simpleComponent() = simpleViewComponent.render() }
例
すぐに始めたい場合は、すべての可能な言語の組み合わせの例がこちらにあります:
例
ViewComponentsのネスト:
レコードのプロパティとしてViewContextを渡すことでコンポーネントをネストできます。
レンダーメソッドのパラメータとしても持っていれば、簡単にレイアウトを作成できます:
Java
java@ViewComponent public class LayoutViewComponent {
private record LayoutView(ViewContext nestedViewComponent) implements ViewContext {
}
public ViewContext render(ViewContext nestedViewComponent) { return new LayoutView(nestedViewComponent); } }
Kotlin
kotlin
@ViewComponent
class LayoutViewComponent {
data class LayoutView(val nestedViewComponent: ViewContext) : ViewContextfun render(nestedViewComponent: ViewContext) = LayoutView(nestedViewComponent)
}
Thymeleaf
Thymeleafでは、渡されたViewComponentをview:component="${viewContext}"属性でレンダリングします。
html
JTE / KTE
JTE/KTEでは、レイアウトビューのレコードを式内で直接呼び出すことができます:
html
@param layoutView: de.tschuehly.kteviewcomponentexample.web.layout.LayoutViewComponent.LayoutView
${layoutView.nestedViewComponent}
ローカル開発構成
テンプレートのホットリロードを開発環境で有効にするには、Spring Boot DevTools を依存関係に含める必要があります。
properties
spring.view-component.local-development=true
インストール
Thymeleaf:
Gradle
kotlin
implementation("de.tschuehly:spring-view-component-thymeleaf:0.9.1")
sourceSets {
main {
resources {
srcDir("src/main/java")
exclude("/*.java")
}
}}
Maven
xml
JTE
Gradle
kotlin
plugins {
id("gg.jte.gradle") version("3.2.1")
}implementation("de.tschuehly:spring-view-component-jte:0.9.1")
jte{ generate() sourceDirectory.set(kotlin.io.path.Path("src/main/java")) }
Maven
xml
KTE
Gradle
kotlinplugins { id("gg.jte.gradle") version ("3.1.12") }
dependencies { implementation("de.tschuehly:spring-view-component-kte:0.9.1") }
jte { generate() sourceDirectory.set(kotlin.io.path.Path("src/main/kotlin")) } ```
技術的実装
Spring ViewComponentはAspectJのアスペクトを使用してSpring MVCコンテナをラップし、自動的にテンプレートを解決してViewContextをModelAndViewContainerに配置します
--- Tranlated By Open Ai Tx | Last indexed: 2026-03-26 ---