Por 9.99€ al mes tendrás acceso completo a todos los cursos. Sin matrícula ni permanencia.
En esta lección aprenderemos cómo validar formularios en Struts 2 utilizando el sistema integrado de validación. Esto nos permite asegurarnos de que los datos ingresados por los usuarios cumplan con los requisitos establecidos antes de procesarlos.
Validación básica
Struts 2 ofrece un mecanismo simple para validar datos mediante archivos XML con sufijo -validation.xml
. Estos archivos deben estar en el mismo paquete que la clase Action correspondiente.
index.jsp
<%@ page contentType="text/html; charset=UTF-8" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<s:head/>
<s:form action="Register" >
<s:textfield label="User Name" key="user.username"/>
<s:password label="Password" key="user.password" />
<s:textfield label="Email" key="user.email" />
<s:submit/>
</s:form>
PacienteAction.java
(el action debe tener los getters y
setters de las propiedades que quiero validar o no se producirá la validación).
PacienteAction-validation.xml (mismo paquete que PacienteAction.java)
<!DOCTYPE validators PUBLIC
"-//Apache Struts//XWork Validator 1.0.2//EN"
"http://struts.apache.org/dtds/xwork-validator-1.0.2.dtd">
<validators>
<field name="user.username">
<field-validator type="requiredstring"><message key="validateRequired"/></field-validator>
</field>
<field name="user.password">
<field-validator type="requiredstring"><message key="validateRequired"/></field-validator>
<field-validator type="stringlength">
<param name="minLength">6</param>
<param name="trim">true</param>
<message key="validatePassword"/>
</field-validator>
</field>
<field name="user.email">
<field-validator type="requiredstring"><message key="validateRequired"/></field-validator>
<field-validator type="email"><message key="validateMail"/></field-validator>
</field>
</validators>
package.properties
validateRequired = ${getText(fieldName)} is required.
validateMail = ${getText(fieldName)} is not in correct format.
validatePassword = ${getText(fieldName)} should be more than 6 character.
struts.xml
<action name="Register" class="com.PacienteAction">
<result>/index.jsp</result>
<result name="input">index.jsp</result>
</action>
PacienteAction.java , PacienteAction-validation.xml y package.properties deben estar en el mismo paquete
Nota:
Lo más apropiado es definir los mensajes de los errores de validación en los ficheros package.properties y las etiquetas de los elementos en los ficheros global. Para mostrar los errores de validación no es necesario registrar los ficheros package.properties en el struts.xml. Sin embargo, si queremos elementos del tipo hagan uso de los valores definidos en estos ficheros, si que deberemos definirlos en el struts.xml
Validar un número
También podemos realizar validaciones específicas, como asegurarnos de que un campo contiene un número.
index.jsp
<s:head/>
<s:form action="Register" >
<s:textfield key="numero" />
<s:submit/>
</s:form>
ValidationAction-validation.xml<!DOCTYPE validators PUBLIC
"-//OpenSymphony Group//XWork Validator 1.0.2//EN"
"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
<validators>
<field name="numero">
<field-validator type="regex">
<param name="expression"><![CDATA[^\d*$]]></param>
<message> Debe ser un entero</message>
</field-validator>
</field>
</validators>
package.properties
invalid.fieldvalue.numero = debes introducir un número
Con la línea anterior lo que hacemos es personalizar el mensaje de error Invalid field value for field «numero» que obtendríamos al convertir un texto en un número.
Validación con theme=»simple»
Cuando usamos el tema simple
en los formularios, es posible personalizar la manera en la que se muestran los errores de validación.
<%@ page contentType="text/html; charset=UTF-8" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<s:head/>
<s:fielderror />
<s:form action="Register2" theme="simple" >
<s:textfield key="user.username"/>
<s:fielderror fieldName="user.username" /><br/>
<s:password key="user.password" />
<s:fielderror fieldName="user.password" /><br/>
<s:textfield key="user.email"/>
<s:fielderror fieldName="user.email" /><br/>
<s:submit/>
</s:form>
Nota:
para quitar las etiquetas ul y li que general el fielderror, habrá que modificar struts2-core-2.0.11.1.jar/template/simple/fielderror.ftl y quitarlas de ahí.
Otras validaciones
Struts 2 ofrece una amplia gama de validadores que podemos usar según nuestras necesidades:
<validators>
<field name="bar">
<field-validator type="required">
<message>You must enter a value for bar.</message>
</field-validator>
<field-validator type="int">
<param name="min">6</param>
<param name="max">10</param>
<message>bar must be between ${min} and ${max}, current value is ${bar}.</message>
</field-validator>
</field>
<field name="bar2">
<field-validator type="regex">
<param name="expression">[0-9],[0-9]</param>
<message>The value of bar2 must be in the format "x, y", where x and y are between 0 and 9</message>
</field-validator>
</field>
<field name="date">
<field-validator type="date">
<param name="min">12/22/2002</param>
<param name="max">12/25/2002</param>
<message>The date must be between 12-22-2002 and 12-25-2002.</message>
</field-validator>
</field>
<validator type="expression">
<param name="expression">foo lt bar </param>
<message>Foo must be greater than Bar. Foo = ${foo}, Bar = ${bar}.</message>
</validator>
</validators>
Notas:
- Documentación de validación. Todos los errores de validación deben estar definidos en los archivos
.properties
. - Validación para métodos específicos. Si deseamos que una validación solo aplique a un método, podemos usar la directiva
@SkipValidation
en los métodos donde no se necesita validación.