Spring WebFlow con Validator
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 la interfaz de
usuario involucra validaciones básicas de los datos que
introduce el usuario. Habitualmente utilizamos validaciones
específicas en las acciones del controlador o en componentes
especializados pero a medida que crece la complejidad de la
aplicación esta solución no es escalable ni mantenible.
Surgen entonces propuestas como Apache Validator donde mediante uno o
más ficheros de configuración se definen las reglas de
validación y la aplicación de dichas reglas a los
campos de los formularios.
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 del proyecto
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á descargarnos el spring modules
http://projects.spring.io/spring-webflow/
seleccionando Releases y la última disponible:

Y la versión del fichero sin dependencias:

Entonces, abrimos el zip

y copiamos el spring-modules-validation.jar en nuestra carpeta
/WEB-INF/lib del proyecto.
Configurando la aplicación
Abrimos el fichero pruebaWebFlowSimple-servlet-config.xml y
añadimos las siguientes definiciones:
<bean
id=«messageSource»
class=«org.springframework.context.support.ResourceBundleMessageSource»>
<property
name=«alwaysUseMessageFormat»
value=«true»
/>
<property
name=«basenames»>
<list>
<value>messages</value>
</list>
</property>
</bean>
<bean
id=«validatorFactory»
class=«org.springmodules.validation.commons.DefaultValidatorFactory»>
<property
name=«validationConfigLocations»>
<list>
<value>/WEB-INF/validations/validator-rules.xml</value>
<value>/WEB-INF/validations/validation.xml</value>
</list>
</property>
</bean>
Primero definimos un messageSource
con el que se resolverá la internacionalización de la
aplicación. Luego se declara el factory del validador y
configurándolo con un fichero de definición de reglas y
otro de definición de la aplicación de dichas reglas a
un formulario. También vamos a modificar la definición
del formAction en /web/WEB-INF/flows/asistente-beans.xml para
incluirle el validador (resaltado en negrita):
<beans
xmlns=«http://www.springframework.org/schema/beans»
xmlns:xsi=«http://www.w3.org/2001/XMLSchema-instance»
xsi:schemaLocation=«http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.0.xsd»>
<bean
id=«formAction»
class=«es.autentia.tutoriales.manualBasicoSpringWebFlow.controller.action.AsistenteAction»>
<property
name=«formObjectScope»
value=«FLOW»
/>
<property
name=«formObjectName»
value=«form»
/>
<property
name=«formObjectClass»
value=«es.autentia.tutoriales.manualBasicoSpringWebFlow.controller.form.AsistenteForm»
/>
<property
name=«validator»
ref=«formActionValidator»/>
</bean>
<bean
id=«formActionValidator»
class=«org.springmodules.validation.commons.ConfigurablePageBeanValidator»>
<property
name=«formName»
value=«formAction»
/>
<property
name=«validatorFactory»
ref=«validatorFactory»
/>
</bean>
</beans>
Vamos a crear los ficheros /WEB-INF/validator-rules.xml
y /WEB-INF/validation.xml.Para
hacerlo sencillo copiaremos los que vienen en el ejemplo
spring-modules-validation-commons-samples-src.zip que viene en
spring-modules-0.8.zip y que encontraremos en
\spring-modules-0.8\samples\sources\spring-modules-validation-bean-samples-src.zip.
Los encontraremos en la carpeta \webapp\WEB-INF\.
Analicemos un fragmento de validator-rules.xml:
<form-validation>
<global>
<validator
name=»required»
classname=»org.springmodules.validation.commons.FieldChecks»
method=»validateRequired»
methodParams=»java.lang.Object,
org.apache.commons.validator.ValidatorAction,
org.apache.commons.validator.Field,
org.springframework.validation.Errors»
msg=»errors.required»>
<javascript><
Algunos links interesantes
-
Sitio oficial de Spring Modules, http://projects.spring.io/spring-webflow/
-
Documentación oficial de Referencia ,
https://springmodules.dev.java.net/docs/reference/0.8/html/validation.html -
Documentación oficial de Commons Validator,
http://struts.apache.org/1.x/faqs/validator.html
Conclusiones
Tras utilizarlo en proyectos de envergadura concluimos que:
-
El framework nos simplifica
asombrosamente la implementación de las validaciones de
interfaz de usuario y nos aporta ya resueltas las validaciones más
frecuentes. -
Nos aporta la capacidad de poder
centralizar y generar reportes actualizados de todas las
validaciones de interfaz de usuario que se realizan en la
aplicación. Esto es muy interesante de cara a presentar
informes de revisión y auditoría a equipos de negocio. -
La configuración de las
validaciones (validation.xml) se podría generar desde una
herramienta o una excel operada por integrantes del equipo de
negocio. -
El Apache Commons Validator se
integra perfectamente con Spring WebFlow. -
Su internacionalización es
muy potente y completa. -
No debemos confudir validaciones
de interfaz de usuario con las validaciones de negocio. Las primeras
son relativas a tipos de datos, rangos, etc. y las segundas tienen
que ver con restricciones de negocio, cálculos, etc. -
Incluye características
avanzadas como soporte a validaciones en interfaces tipo asistente
(varios pasos), validación de múltiples campos,
validaciones condicionales y hasta soporte a un lenguaje de
validaciones en xml llamado valang.
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 .