
Spring ViewComponent vous permet de créer des composants UI côté serveur, typesafe, réutilisables et encapsulés.
##### Table des matières
- Qu’est-ce qu’un ViewComponent ?
- Rendre un ViewComponent
- Imbrication des ViewComponents :
- Configuration pour le développement local
- Configuration pour la production
- Installation
- Implémentation technique
Qu’est-ce qu’un ViewComponent ?
Les ViewComponents consolident la logique nécessaire à un template dans une seule classe, ce qui donne un objet cohérent et facile à comprendre. (Source : ViewComponent pour Rails)
Un Spring ViewComponent est un Bean Spring qui définit le contexte pour notre Template :
Java
@ViewComponent
public class SimpleViewComponent { public record SimpleView(String helloWorld) implements ViewContext {
}
public SimpleView render() {
return new SimpleView("Hello World");
}
}
Nous définissons le contexte en créant un enregistrement qui implémente l'interface ViewContext
Ensuite, nous ajoutons l'annotation @ViewComponent à une classe et définissons une méthode qui retourne l'enregistrement SimpleView.
Kotlin
// SimpleViewComponent.kt
@ViewComponent
class SimpleViewComponent {
fun render() = SimpleView("Hello World") data class SimpleView(val helloWorld: String) : ViewContext
}
Un ViewComponent nécessite toujours un modèle HTML correspondant. Nous définissons le modèle dans le SimpleViewComponent.[html/jte/kte] Dans le même package que notre classe ViewComponent.
Nous pouvons utiliser Thymeleaf
```html
// SimpleViewComponent.html
ou JTE
html
// SimpleViewComponent.jte
@param de.tschuehly.example.jte.web.simple.SimpleViewComponent.SimpleView simpleView
ou KTE
html
@param simpleView: de.tschuehly.kteviewcomponentexample.web.simple.SimpleViewComponent.SimpleView
This is the SimpleViewComponent
Rendre un ViewComponent
Nous pouvons ensuite appeler la méthode render dans notre contrôleur pour rendre le template.
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() }
Exemples
Si vous voulez commencer tout de suite, vous pouvez trouver des exemples pour toutes les combinaisons de langues possibles ici :
Exemples
Imbrication de ViewComponents :
Nous pouvons imbriquer des composants en passant un ViewContext comme propriété de notre enregistrement,
si nous l'avons également comme paramètre de notre méthode de rendu, nous pouvons facilement créer des mises en page :
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
Dans Thymeleaf, nous rendons le ViewComponent passé avec l'attribut view:component="${viewContext}".
html
JTE / KTE
Dans JTE/KTE, nous pouvons simplement appeler directement l'enregistrement LayoutView dans une expression :
html
@param layoutView: de.tschuehly.kteviewcomponentexample.web.layout.LayoutViewComponent.LayoutView
${layoutView.nestedViewComponent}
Configuration de développement local
Vous pouvez activer le rechargement à chaud des modèles en développement, vous devez avoir Spring Boot DevTools comme dépendance.
properties
spring.view-component.local-development=true
Installation
Thymeleaf :
LATEST_VERSION sur Maven Central
Gradle
kotlin
implementation("de.tschuehly:spring-view-component-thymeleaf:0.9.1")
sourceSets {
main {
resources {
srcDir("src/main/java")
exclude("/*.java")
}
}}
Maven
xml
JTE
DERNIÈRE_VERSION sur Maven Central
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
DERNIÈRE_VERSION sur Maven Central
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")) } ```
Implémentation Technique
Spring ViewComponent encapsule le conteneur Spring MVC en utilisant un Aspect AspectJ et résout automatiquement le template tout en plaçant le ViewContext dans le ModelAndViewContainer
--- Tranlated By Open Ai Tx | Last indexed: 2026-03-26 ---