Web Analytics

spring-view-component

⭐ 234 stars Spanish by tschuehly

image

Spring ViewComponent te permite crear componentes de interfaz de usuario renderizados en el servidor, reutilizables, encapsulados y con tipos seguros.

##### Tabla de Contenidos

¿Qué es un ViewComponent?

Los ViewComponents consolidan la lógica necesaria para una plantilla en una sola clase, resultando en un objeto cohesivo que es fácil de entender. (Fuente: ViewComponent para Rails)

Un Spring ViewComponent es un Bean de Spring que define el contexto para nuestra Plantilla:

Java


@ViewComponent
public class SimpleViewComponent {

public record SimpleView(String helloWorld) implements ViewContext {

}

public SimpleView render() { return new SimpleView("Hello World"); } }

Definimos el contexto creando un registro que implementa la interfaz ViewContext

A continuación, añadimos la anotación @ViewComponent a una clase y definimos un método que devuelve el registro SimpleView.

Kotlin

// SimpleViewComponent.kt
@ViewComponent
class SimpleViewComponent {
    fun render() = SimpleView("Hello World")

data class SimpleView(val helloWorld: String) : ViewContext }

Un ViewComponent siempre necesita una plantilla HTML correspondiente. Definimos la plantilla en el SimpleViewComponent.[html/jte/kte] en el mismo paquete que nuestra clase ViewComponent.

Podemos usar Thymeleaf

```html // SimpleViewComponent.html

o JTE

html // SimpleViewComponent.jte @param de.tschuehly.example.jte.web.simple.SimpleViewComponent.SimpleView simpleView
${simpleView.helloWorld()}

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

This is the SimpleViewComponent

${simpleView.helloWorld}

Renderizar un ViewComponent

Luego podemos llamar al método render en nuestro controlador para renderizar la plantilla.

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() }


Ejemplos

Si quieres empezar de inmediato, puedes encontrar ejemplos para todas las combinaciones posibles de idiomas aquí: Ejemplos

Anidando ViewComponents:

Podemos anidar componentes pasando un ViewContext como propiedad de nuestro registro, si también lo tenemos como parámetro de nuestro método render, podemos crear fácilmente diseños:

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

En Thymeleaf renderizamos el ViewComponent pasado con el atributo view:component="${viewContext}".

html

This is a footer

JTE / KTE

En JTE/KTE podemos simplemente llamar al registro LayoutView directamente en una expresión:

html @param layoutView: de.tschuehly.kteviewcomponentexample.web.layout.LayoutViewComponent.LayoutView ${layoutView.nestedViewComponent}
This is a footer

Configuración de Desarrollo Local

Puedes habilitar la recarga en caliente de las plantillas en desarrollo, necesitas tener Spring Boot DevTools como dependencia.

properties spring.view-component.local-development=true

Instalación

Thymeleaf:

ÚLTIMA_VERSIÓN en 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

ÚLTIMA_VERSIÓN en 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

ÚLTIMA_VERSIÓN en 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")) } ```

Implementación Técnica

Spring ViewComponent envuelve el contenedor Spring MVC usando un Aspecto de AspectJ y resuelve automáticamente la plantilla y coloca el ViewContext en el ModelAndViewContainer

image

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