Está en: Inicio >> ISValidator >> Ejemplos >> Struts Completo
SourceForge Logo

Página... Struts Completo

Ejemplos de ISValidator

Esta página recoge uno de los ejemplos de uso de las rutinas ISValidator. Puede así mismo ver los ejemplos que se incluyen en el paquete para descargar.

Situación

Este es un ejemplo del empleo de ISValidator junto con el Framework Struts de Apache. Ambos paquetes son complementarios ya que a la gestión MVC que realiza Struts se le puede añadir la gestión de validaciones que realiza ISValidator.

Este uso de las validaciones de ISValidator en Struts se puede plantear en varios niveles. El ejemplo que se presenta aqui es el más completo y que mas prestaciones proporciona, aunque de momento para la versión 0.0.10 está todavía incompleto, faltando de realizar el contenedor de procesadores.

Código del ejemplo

Este ejemplo es una adaptacion del ejemplo de Struts 1.0 y está hecho para la versión 0.0.10 de las rutinas ISValidator

En este ejemplo se modifica el LoginForm del ejemplo de Struts 1.0 para utilizar ISValidator

//added this imports
import com.inigoserrano.isvalidator.constraintsV01.*;
import com.inigoserrano.isvalidator.constraintsContainersV01.*;
import com.inigoserrano.isvalidator.constraintsExceptionsV01.*;
import com.inigoserrano.isvalidator.metaContainersV01.*;
import com.inigoserrano.isvalidator.inValidConstraintProcessors.*;

/**
 * Form bean for the user profile page.  This form has the following fields,
 * with default values in square brackets:
 * <ul>
 * <li><b>password</b> - Entered password value
 * <li><b>username</b> - Entered username value
 * </ul>
 *
 * @author Craig R. McClanahan
 * @version $Revision: 1.2 $ $Date: 2001/12/12 12:15:03 $
 */

public final class LoginForm1 extends ActionForm {

      private SimpleConstraintContainer password;
      private SimpleConstraintContainer username;

public String getPassword() {
	return (this.password.getValueToCheck());
}


public void setPassword(String password) {
try{
        this.password=new SimpleConstraintContainer(password,"password");
        this.password.addConstraint(new NotBlankConstraint());
} catch (InternalConstraintException e) {
        //do nothing
}
}

public String getUsername() {
	return (this.username.getValueToCheck());
}

public void setUsername(String username) {
try{
        this.username=new SimpleConstraintContainer(username,"username");
        this.username.addConstraint(new NotBlankConstraint());
} catch (InternalConstraintException e) {
        //do nothing
}
}


public void reset(ActionMapping mapping, HttpServletRequest request) {
        this.password = null;
        this.username = null;
}


public ActionErrors validate(ActionMapping mapping,
                                 HttpServletRequest request) {

        ActionErrors errors = new ActionErrors();
try{
        SimpleMetaContainer allParameters = new SimpleMetaContainer();
        allParameters.addContainer(password);
        allParameters.addContainer(username);
        if (!allParameters.checkConstraint()){
            allParameters.setInValidConstraintProcesor(new StrutsInValidConstraintProcesor(new StrutsInValidContraintProcesorContainer()));
            //return an ActionErrors
            return allParameters.getInValidConstraintProcesorContainer().getActionErrors();
        }else
        return errors;


}catch(InternalConstraintException e){
return null;
}
catch(ConstraintException e){
return null;
}
catch(InValidConstraintProcesorInternalException e){
return null;
}
}

}
                        

Descripción del Código

Los cambios sobre el código son algo más profundos, se sustituyen los String que representan los campos por un contenedor de restricciones, en este caso el SimpleConstraintContainer, ya que no está especializado para ningún dominio.

      private SimpleConstraintContainer password;
      private SimpleConstraintContainer username;
                        

Lo siguiente que cambia son los métodos para obtener y poner los campos, ya que ahora deben utilizar el SimpleConstraintContainer. Tambien el el método de poner los valores de los campos se añaden las restricciones. Esto último tambien se podría haber realizado en el método validate.

public void setPassword(String password) {
try{
        this.password=new SimpleConstraintContainer(password);
        this.password.addConstraint(new NotBlankConstraint());
} catch (InternalConstraintException e) {
        //do nothing
}
}
                        

A la hora de realizar la validación vienen los cmabios más profundos, ya que la generación de el objeto ActionError ahora es automática. Las etiquetas descriptivas del error, para buscarlos en el fichero de propiedades cambia y ahora es error.nombreDelParametro.nombreDeLaRestriccionQueHaFallado

        SimpleMetaContainer allParameters = new SimpleMetaContainer();
        allParameters.addContainer(password);
        allParameters.addContainer(username);
        if (!allParameters.checkConstraint()){
            allParameters.setInValidConstraintProcesor(new StrutsInValidConstraintProcesor(new StrutsInValidContraintProcesorContainer()));
        }
        //return an ActionErrors
        return allParameters.getInValidConstraintProcesorContainer().getActionErrors();
                        



Iñigo Serrano todos los derechos reservados.
Queda prohibida la reproducción total o parcial del contenido aquí expuesto.