Author: dsvyatobatsko
Date: 2008-07-07 13:47:21 -0400 (Mon, 07 Jul 2008)
New Revision: 9434
Modified:
trunk/sandbox/ui/beanValidator/src/main/config/component/beanValidator.xml
trunk/sandbox/ui/beanValidator/src/main/java/org/richfaces/component/UIBeanValidator.java
trunk/sandbox/ui/beanValidator/src/main/java/org/richfaces/validator/FacesBeanValidator.java
Log:
Modified: trunk/sandbox/ui/beanValidator/src/main/config/component/beanValidator.xml
===================================================================
--- trunk/sandbox/ui/beanValidator/src/main/config/component/beanValidator.xml 2008-07-07
17:35:57 UTC (rev 9433)
+++ trunk/sandbox/ui/beanValidator/src/main/config/component/beanValidator.xml 2008-07-07
17:47:21 UTC (rev 9434)
@@ -5,42 +5,46 @@
<component>
<name>org.richfaces.BeanValidator</name>
<family>org.richfaces.BeanValidator</family>
- <classname>org.richfaces.component.html.HtmlBeanValidator</classname>
+ <classname>
+ org.richfaces.component.html.HtmlBeanValidator
+ </classname>
<superclass>org.richfaces.component.UIBeanValidator</superclass>
- <description>
- <![CDATA[
- ]]>
- </description>
+ <description><![CDATA[]]></description>
<renderer generate="true" override="true">
<name>org.richfaces.BeanValidatorRenderer</name>
<template>org/richfaces/ui/htmlBeanValidator.jspx</template>
</renderer>
<tag>
<name>ajaxValidator</name>
- <classname>org.richfaces.taglib.BeanValidatorTag</classname>
+ <classname>org.richfaces.taglib.AjaxValidatorTag</classname>
<superclass>
org.ajax4jsf.webapp.taglib.HtmlComponentTagBase
</superclass>
</tag>
<!--
- <taghandler>
+ <taghandler>
<classname>org.ajax4jsf.tag.TestHandler</classname>
- </taghandler>
+ </taghandler>
-->
&ui_component_attributes;
- <!--
- <property>
- <name>param</name>
+ <!--
+ <property>
+ <name>event</name>
<classname>java.lang.String</classname>
<description>
+ Name of JavaScript event property ( onclick, onchange,
+ etc.) of parent component by which validation will be
+ triggered
</description>
- <defaultvalue>"default"</defaultvalue>
- </property>
- -->
+ <defaultvalue><![CDATA["onblur"]]></defaultvalue>
+ </property>
+ -->
</component>
- <validator generate="false">
+ <validator generate="false">
<id>org.richfaces.BeanValidator</id>
- <classname>org.richfaces.validator.FacesBeanValidator</classname>
+ <classname>
+ org.richfaces.validator.FacesBeanValidator
+ </classname>
<description>
<![CDATA[Validate Input by the Bean/Hibernate validator annotations]]>
</description>
@@ -50,5 +54,5 @@
<superclass>javax.faces.webapp.ValidatorELTag</superclass>
</tag>
</validator>
-
+
</components>
Modified:
trunk/sandbox/ui/beanValidator/src/main/java/org/richfaces/component/UIBeanValidator.java
===================================================================
---
trunk/sandbox/ui/beanValidator/src/main/java/org/richfaces/component/UIBeanValidator.java 2008-07-07
17:35:57 UTC (rev 9433)
+++
trunk/sandbox/ui/beanValidator/src/main/java/org/richfaces/component/UIBeanValidator.java 2008-07-07
17:47:21 UTC (rev 9434)
@@ -4,16 +4,69 @@
package org.richfaces.component;
+import javax.el.ValueExpression;
+import javax.faces.component.EditableValueHolder;
+import javax.faces.component.UIComponent;
import javax.faces.component.UIComponentBase;
+import javax.faces.context.FacesContext;
+import javax.faces.context.FacesContextFactory;
+import javax.faces.validator.Validator;
+import org.ajax4jsf.renderkit.AjaxRendererUtils;
+import org.richfaces.validator.FacesBeanValidator;
+
+import com.sun.facelets.FaceletException;
+
/**
* JSF component class
*
*/
public abstract class UIBeanValidator extends UIComponentBase {
-
- public static final String COMPONENT_TYPE = "org.richfaces.ui.BeanValidator";
-
- public static final String COMPONENT_FAMILY =
"org.richfaces.ui.BeanValidator";
-
+
+ public static final String COMPONENT_TYPE =
"org.richfaces.ui.BeanValidator";
+
+ public static final String COMPONENT_FAMILY =
"org.richfaces.ui.BeanValidator";
+
+ public String getEvent() {
+ return "onblur";
+ }
+
+ public void setParent(UIComponent parent) {
+ super.setParent(parent);
+
+ if (!(parent instanceof EditableValueHolder)) {
+ throw new FaceletException("Parent component must be an
EditableValueHolder");
+ }
+
+ Validator[] validators = ((EditableValueHolder) parent).getValidators();
+
+ boolean isFacesValidatorPresent = false;
+ for (Validator validator : validators) {
+ if (validator instanceof FacesBeanValidator) {
+ isFacesValidatorPresent = true;
+ break;
+ }
+ }
+
+ if (!isFacesValidatorPresent) {
+ FacesBeanValidator validator = (FacesBeanValidator)
FacesContext.getCurrentInstance().getApplication()
+ .createValidator("org.richfaces.BeanValidator");
+ ((EditableValueHolder) parent).addValidator(validator);
+ }
+
+ FacesContext ctx = FacesContext.getCurrentInstance();
+ ValueExpression binding =
ctx.getApplication().getExpressionFactory().createValueExpression(ctx.getELContext(),
+ getEventString(), String.class);
+
+ parent.setValueExpression(getEvent(), binding);
+ }
+
+ private String getEventString()
+ {
+ StringBuffer buildOnEvent = new StringBuffer();
+ // Due to JSF RI 1.1 bug, clear cached clientId
+ setId(getId());
+ buildOnEvent.append(AjaxRendererUtils.buildOnEvent(this, getFacesContext(),
getEvent()));
+ return buildOnEvent.toString();
+ }
}
Modified:
trunk/sandbox/ui/beanValidator/src/main/java/org/richfaces/validator/FacesBeanValidator.java
===================================================================
---
trunk/sandbox/ui/beanValidator/src/main/java/org/richfaces/validator/FacesBeanValidator.java 2008-07-07
17:35:57 UTC (rev 9433)
+++
trunk/sandbox/ui/beanValidator/src/main/java/org/richfaces/validator/FacesBeanValidator.java 2008-07-07
17:47:21 UTC (rev 9434)
@@ -32,8 +32,10 @@
String[] messages = BeanValidator.getInstance(context).validate(context,
valueExpression, convertedValue);
if(null != messages){
input.setValid(false);
- // TODO - send all validation messages.
- throw new ValidatorException(new
FacesMessage(FacesMessage.SEVERITY_ERROR,messages[0],""));
+ // TODO - send all validation messages.
+ for (String msg : messages) {
+ context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR,
msg,""));
+ }
}
}
}