Tip Struts 2 #16: Errores de validación

21/05/2015
struts2 tip

En el tip 5 vimos el sistema de envío mensajes a las JPSs de Struts 2, pero hay un caso particular: los errores de validación asociados a los campos de un formulario. En este tip veremos cómo hacerlo con el objetivo de mostrar junto a cada campo del formulario los mensajes de error correspondientes al mismo.

Lo que haremos será registrar los mensajes de error con el método addFieldError de ActionSupport. Este método recibe el nombre del campo y la cadena con el error tal y como se mostrará, por lo que si hay que localizarla lo haremos en el mismo Action con getText. Internamente Struts 2 guardará estos errores en un Map<String, List> para pemitir múltiples mensajes para un mismo campo.

private String name;
	
	public String email;
	
	public String submitForm()
	{		
		if (StringUtils.isBlank(name))
		{
			addFieldError("name", getText("error.name.required"));
		}
		else if (name.length() < 3)
		{
			addFieldError("name", getText("error.name.min"));
		}
		else if (name.length() > 6)
		{
			addFieldError("name", getText("error.name.max"));
		}
		if (!StringUtils.isEmpty(email) && !EMAIL_PATTERN.matcher(email).matches())
		{
			addFieldError("email", getText("error.name.email"));
		}
		return INPUT;
	}

También contamos con el método hasFieldError que indica si hay errores asociados a los campos e incluso es posible acceder directamente al Map de los mensajes con getFieldError.

En la JSP podemos hacer uso de los métodos anteriores pero la etiqueta s:fielderror facilita el trabajo ya que imprime una lista ul con todos los mensajes de error. Se puede especificar un campo concreto con el atributo fieldName. En el proyecto de ejemplo el formulario maquetado con Bootstrap quedaría así:

<h3><s:text name="title"/></h3>
			 	<s:if test="hasFieldErrors()">
				 	<div class="alert alert-danger" role="alert">
	  					<span class="glyphicon glyphicon-exclamation-sign" aria-hidden="true"></span>
	  					<span class="sr-only">Error:</span>
	  						<s:text name="errors"/> 
					</div>
				</s:if>
				<s:form action="submitForm" theme="simple" method="POST">
			  		
			  		<div class="form-group <s:if test='hasFieldErrors().containsKey(name)'>has-error</s:if>">			  		
			    		<label for="name"><s:text name="field.name"/></label>
			   			 <s:textfield name="name" cssClass="form-control" />  
			   			 <s:fielderror fieldName="name" cssClass="help-block" cssStyle="color:red"/>			   			 
			  		</div>	 
			  		<div class="form-group <s:if test='hasFieldErrors().containsKey(email)'>has-error</s:if>">			  		
			    		<label for="email"><s:text name="field.email"/></label>
			   			 <s:textfield name="email" cssClass="form-control" />  
			   			 <s:fielderror fieldName="email" cssClass="help-block" cssStyle="color:red"/>			   			 
			  		</div>	 
			 
			  		<button type="submit" class="btn btn-primary"><s:text name="button.submit"/></button>
			 
				</s:form>

El resultado.

struts 2  field error

El proyecto completo para Maven se encuentra en Github. Para más información sobre cómo utilizar GitHub, consultar este artículo.

<< TIPS STRUTS 2

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: