[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