Regístrate para votar
Spring WebFlow con Tiles
En el tutorial “Manual Básico de Spring WebFlow” hemos visto cómo poner a funcionar este maravilloso controlador. Cuando comenzamos a desarrollar una aplicación, descubrimos inmediatamente que su interfaz de usuario es un conjunto de “componentes visuales” que como tales deben encapsularse y gestionarse. Habitualmente usamos includes pero a medida que crece la complejidad de la aplicación esta solución no es escalable. Surgen entonces propuestas como Apache Tiles donde mediante uno o más ficheros de configuración se indica cómo se compone una página. Por ejemplo: podemos decir que la página “Principal” se compone mediante la plantilla “SinColumnas” con el cuerpo “paginaPrincipal” y el título “Aplicacion X: Página Principal”.
El objetivo de este tutorial es facilitar el primer contacto con esta tecnología partiendo del ejemplo realizado en el tutorial “Manual Básico de Spring WebFlow” analizar su aplicabilidad, recomendar algunos links y comentaros nuestras conclusiones.
Preparación de las plantillas
Comenzaremos a partir del proyecto que creamos en el ejemplo realizado en el tutorial “Manual Básico de Spring WebFlow”.
Lo primero que haremos será refactorizar las páginas. Crearemos /pruebaWebFlowSimple/web/WEB-INF/jsp/plantilla.jsp donde pondremos:
<%@ taglib prefix="tiles" uri="http://jakarta.apache.org/struts/tags-tiles" %>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title><tiles:getAsString name="titulo"/></title>
</head>
<body>
<tiles:insert name="cuerpo"/>
</body>
</html>
Entonces a las páginas /pruebaWebFlowSimple/web/WEB-INF/jsp/paso1.jsp, /pruebaWebFlowSimple/web/WEB-INF/jsp/paso2.jsp y /pruebaWebFlowSimple/web/WEB-INF/jsp/paso3.jsp les quitaremos el contenido anterior y posterior a <body>:
/pruebaWebFlowSimple/web/WEB-INF/jsp/paso1.jsp:
<h1>Asistente sumador: Paso 1</h1>
<form>
<input type="hidden" name="_flowId" value="asistente-flow" />
<input type="hidden" name="_eventId" value="siguiente" />
<input type="hidden" name="_flowExecutionKey" value="${flowExecutionKey}" />
<p>${form.mensaje}</p>
<p>Primer número: <input type="text" name="numero1" value="${form.numero1}"/></p>
<p>Segundo número: <input type="text" name="numero2" value="${form.numero2}"/></p>
<input type="submit" value="siguiente" />
</form>
/pruebaWebFlowSimple/web/WEB-INF/jsp/paso2.jsp
<h1>Asistente sumador: Paso 2</h1>
<form>
<input type="hidden" name="_flowId" value="asistente-flow" />
<input type="hidden" name="_eventId" value="siguiente" />
<input type="hidden" name="_flowExecutionKey" value="${flowExecutionKey}" />
<p>${form.mensaje}</p>
<input type="submit" value="siguiente" />
<input type="submit" value="anterior" onclick="document.forms[0]._eventId.value='anterior';return true;"/>
</form>
/pruebaWebFlowSimple/web/WEB-INF/jsp/paso3.jsp:
<h1>Asistente sumador: Paso 3</h1>
<form>
<p>${form.mensaje}</p>
</form>
Definición de las plantillas
Una vez que tenemos las plantillas, debemos definírselas a Tiles mediante un fichero que crearemos en /pruebaWebFlowSimple/web/WEB-INF/tiles/templates.xml con el siguiente contenido:
<tiles-definitions>
<definition name="plantilla" page="/WEB-INF/jsp/plantilla.jsp" />
<definition name="paso1" extends="plantilla">
<put name="cuerpo" value="/WEB-INF/jsp/paso1.jsp" type="page"/>
<put name="titulo" value="asistente.paso1.titulo" />
</definition>
<definition name="paso2" extends="plantilla">
<put name="cuerpo" value="/WEB-INF/jsp/paso2.jsp" type="page"/>
<put name="titulo" value="asistente.paso2.titulo" />
</definition>
<definition name="paso3" extends="plantilla">
<put name="cuerpo" value="/WEB-INF/jsp/paso3.jsp" type="page"/>
<put name="titulo" value="asistente.paso3.titulo" />
</definition>
</tiles-definitions>
Vemos entonces cómo se define la plantilla, las páginas que las utilizan y sus parámetros.
Actualización de las configuraciones
Ahora sólo resta la configuración. En actualizaremos el viewResolver para adecuarlo al uso de Tiles:
...
<bean id="viewResolver"
class="org.springframework.web.servlet.view.UrlBasedViewResolver">
<property name="viewClass"
value="org.springframework.web.servlet.view.tiles.TilesView" />
</bean>
...
Y añadiremos el tilesConfigurer para que lea el fichero que hemos creado:
<bean id="tilesConfigurer"
class="org.springframework.web.servlet.view.tiles.TilesConfigurer">
<property name="definitions">
<list>
<value>/WEB-INF/tiles/templates.xml</value>
</list>
</property>
</bean>
Ejecutando la aplicación
Lanzamos el servidor con la URL http://localhost:8080/pruebaWebFlowSimple/asistente.flow y veremos en funcionamiento el ejemplo .
Una mejora que podemos implementar es utilizar la internacionalización para que el título y otros parámetros se adecúen al idioma del usuario.
Algunos links interesantes
Sitio oficial de Tiles, http://struts.apache.org/1.x/struts-tiles/
Documentación oficial de Referencia , http://struts.apache.org/1.x/struts-tiles/userGuide.html
Tiles 2, http://tiles.apache.org/
Conclusiones
Tras utilizarlo en proyectos de envergadura concluimos que:
El Apache Tiles se integra perfectamente con Spring WebFlow.
Su internacionalización soporta esquemas de plantillas específicos para cada idioma.
Incluye un rudimentario soporte de roles para adecuar las plantillas al perfil de seguridad del usuario.
Mediante TilesUtil se puede acceder a las definiciones y cambiarlas en caliente para adecuarlas a configuraciones en base de datos u otros criterios funcionales.
Desde Autentia contamos con los conocimientos y experiencia para ayudarle a sacar la máxima ventaja de las tecnologías más innovadoras y mejorar la calidad de sus desarrollos software.
No dude en contactarse con nosotros mediante www.autentia.com .
Puedes opinar o comentar cualquier sugerencia que quieras comunicarnos sobre este tutorial; con tu ayuda, podemos ofrecerte un mejor servicio.








