Web Analytics

spring-view-component

⭐ 234 stars French by tschuehly

image

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 ?

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
${simpleView.helloWorld()}

ou KTE
html @param simpleView: de.tschuehly.kteviewcomponentexample.web.simple.SimpleViewComponent.SimpleView

This is the SimpleViewComponent

${simpleView.helloWorld}

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) : ViewContext

fun render(nestedViewComponent: ViewContext) = LayoutView(nestedViewComponent)

}


Thymeleaf

Dans Thymeleaf, nous rendons le ViewComponent passé avec l'attribut view:component="${viewContext}".

html

This is a footer

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}
This is a footer

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 de.tschuehly spring-view-component-thymeleaf 0.9.1 src/main/java /*.html src/main/resources maven-resources-plugin 3.3.0

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 de.tschuehly spring-view-component-jte 0.9.1 gg.jte jte-maven-plugin 3.1.12 ${project.basedir}/src/main/java Html generate-sources generate

KTE

DERNIÈRE_VERSION sur Maven Central

Gradle
kotlin

plugins { 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

image

--- Tranlated By Open Ai Tx | Last indexed: 2026-03-26 ---