
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?
- Renderizar un ViewComponent
- Anidación de ViewComponents:
- Configuración para Desarrollo Local
- Configuración para Producción
- Instalación
- Implementación Técnica
¿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 JTEhtml
// SimpleViewComponent.jte
@param de.tschuehly.example.jte.web.simple.SimpleViewComponent.SimpleView simpleView
o KTE
html
@param simpleView: de.tschuehly.kteviewcomponentexample.web.simple.SimpleViewComponent.SimpleView
This is the SimpleViewComponent
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) : ViewContextfun render(nestedViewComponent: ViewContext) = LayoutView(nestedViewComponent)
}
Thymeleaf
En Thymeleaf renderizamos el ViewComponent pasado con el atributo view:component="${viewContext}".
html
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}
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
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
KTE
ÚLTIMA_VERSIÓN en 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")) } ```
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
--- Tranlated By Open Ai Tx | Last indexed: 2026-03-26 ---