[jboss-cvs] jboss-seam/ui/src/main/java/org/jboss/seam/ui/validator ...

Gavin King gavin.king at jboss.com
Sun Jun 24 18:31:20 EDT 2007


  User: gavin   
  Date: 07/06/24 18:31:20

  Modified:    ui/src/main/java/org/jboss/seam/ui/validator 
                        ModelValidator.java
  Log:
  redesign model-based validation, according to advice of Jacob
  JBSEAM-1593
  
  Revision  Changes    Path
  1.3       +41 -3     jboss-seam/ui/src/main/java/org/jboss/seam/ui/validator/ModelValidator.java
  
  (In the diff below, changes in quantity of whitespace are not shown.)
  
  Index: ModelValidator.java
  ===================================================================
  RCS file: /cvsroot/jboss/jboss-seam/ui/src/main/java/org/jboss/seam/ui/validator/ModelValidator.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -b -r1.2 -r1.3
  --- ModelValidator.java	19 Jun 2007 21:57:50 -0000	1.2
  +++ ModelValidator.java	24 Jun 2007 22:31:20 -0000	1.3
  @@ -1,23 +1,61 @@
   package org.jboss.seam.ui.validator;
   
  +import javax.el.ELException;
   import javax.el.ValueExpression;
  +import javax.faces.application.FacesMessage;
   import javax.faces.component.UIComponent;
   import javax.faces.context.FacesContext;
   import javax.faces.validator.Validator;
   import javax.faces.validator.ValidatorException;
   
  -import org.jboss.seam.faces.FacesExpressions;
  +import org.hibernate.validator.InvalidValue;
  +import org.jboss.seam.core.Validators;
  +import org.jboss.seam.faces.FacesMessages;
   
  +/**
  + * Validates using Hibernate Validator model-based annotations.
  + * 
  + * @author Gavin King
  + * @author Jacob Hookom
  + *
  + */
   public class ModelValidator implements Validator
   {
   
  -   public void validate(FacesContext context, UIComponent component, Object value)
  +   public void validate(FacesContext facesContext, UIComponent component, Object value)
               throws ValidatorException
      {
         ValueExpression valueExpression = component.getValueExpression("value");
         if (valueExpression != null)
         {
  -         FacesExpressions.instance().validate( valueExpression.getExpressionString(), value );
  +         //TODO: note that this code is duplicated to Param.getValueFromRequest()!!
  +         InvalidValue[] invalidValues;
  +         try
  +         {
  +            invalidValues = Validators.instance().validate( valueExpression, facesContext.getELContext(), value );
  +         }
  +         catch (ELException ele)
  +         {
  +            Throwable cause = ele.getCause();
  +            if (cause==null) cause = ele;
  +            throw new ValidatorException( createMessage(cause), cause );
  +         }
  +         
  +         if ( invalidValues.length>0 )
  +         {
  +            throw new ValidatorException( createMessage(invalidValues) );
  +         }
         }
      }
  +
  +   private FacesMessage createMessage(InvalidValue[] invalidValues)
  +   {
  +      return FacesMessages.createFacesMessage( FacesMessage.SEVERITY_ERROR, invalidValues[0].getMessage() );
  +   }
  +
  +   private FacesMessage createMessage(Throwable cause)
  +   {
  +      return new FacesMessage(FacesMessage.SEVERITY_ERROR, "model validation failed:" + cause.getMessage(), null);
  +   }
  +
   }
  
  
  



More information about the jboss-cvs-commits mailing list