Author: alexsmirnov
Date: 2011-02-25 18:29:51 -0500 (Fri, 25 Feb 2011)
New Revision: 21944
Added:
branches/4.0.0.CR1/ui/validator/ui/src/main/java/org/richfaces/component/behavior/MessageUpdateScript.java
Modified:
branches/4.0.0.CR1/ui/validator/ui/src/main/java/org/richfaces/component/AbstractGraphValidator.java
branches/4.0.0.CR1/ui/validator/ui/src/main/java/org/richfaces/component/behavior/ClientValidatorImpl.java
branches/4.0.0.CR1/ui/validator/ui/src/main/java/org/richfaces/renderkit/html/AjaxOnlyScript.java
branches/4.0.0.CR1/ui/validator/ui/src/main/java/org/richfaces/renderkit/html/ClientAndAjaxScript.java
branches/4.0.0.CR1/ui/validator/ui/src/main/java/org/richfaces/renderkit/html/ClientOnlyScript.java
branches/4.0.0.CR1/ui/validator/ui/src/main/java/org/richfaces/validator/BeanValidatorServiceImpl.java
branches/4.0.0.CR1/ui/validator/ui/src/main/java/org/richfaces/validator/FacesBeanValidator.java
branches/4.0.0.CR1/ui/validator/ui/src/main/resources/META-INF/csv.xml
branches/4.0.0.CR1/ui/validator/ui/src/main/resources/META-INF/resources/org.richfaces/richfaces-csv.js
Log:
https://issues.jboss.org/browse/RF-10591
Modified:
branches/4.0.0.CR1/ui/validator/ui/src/main/java/org/richfaces/component/AbstractGraphValidator.java
===================================================================
---
branches/4.0.0.CR1/ui/validator/ui/src/main/java/org/richfaces/component/AbstractGraphValidator.java 2011-02-25
20:48:14 UTC (rev 21943)
+++
branches/4.0.0.CR1/ui/validator/ui/src/main/java/org/richfaces/component/AbstractGraphValidator.java 2011-02-25
23:29:51 UTC (rev 21944)
@@ -33,14 +33,17 @@
import javax.faces.context.FacesContext;
import javax.faces.validator.Validator;
+import org.richfaces.application.ServiceTracker;
import org.richfaces.cdk.annotations.Attribute;
import org.richfaces.cdk.annotations.JsfComponent;
import org.richfaces.cdk.annotations.Tag;
import org.richfaces.cdk.annotations.TagType;
import org.richfaces.el.CapturingELResolver;
import org.richfaces.el.ELContextWrapper;
+import org.richfaces.log.Logger;
+import org.richfaces.log.RichfacesLogger;
+import org.richfaces.validator.BeanValidatorService;
import org.richfaces.validator.FacesBeanValidator;
-import org.richfaces.validator.GraphValidator;
import org.richfaces.validator.GraphValidatorState;
/**
@@ -53,6 +56,8 @@
public static final String COMPONENT_TYPE =
"org.richfaces.GraphValidator";
public static final String COMPONENT_FAMILY =
"org.richfaces.GraphValidator";
+
+ private static final Logger LOG = RichfacesLogger.COMPONENTS.getLogger();
/**
* Get object for validation
@@ -204,24 +209,17 @@
private void validateObject(FacesContext context, Object value) {
if (null != value) {
- Validator validator = context.getApplication().createValidator(getType());
- if (validator instanceof GraphValidator) {
- GraphValidator graphValidator = (GraphValidator) validator;
- Collection<String> messages = graphValidator.validateGraph(context,
this, value, getGroups());
- if (null != messages) {
- context.renderResponse();
- // send all validation messages.
- String clientId = getClientId(context);
- for (String msg : messages) {
- // TODO - create Summary message ?
- String summary = null != getSummary() ? getSummary() + msg :
msg;
- context.addMessage(clientId, new
FacesMessage(FacesMessage.SEVERITY_ERROR, summary, msg));
- }
+ Collection<String> messages;
+ BeanValidatorService validatorService =
ServiceTracker.getService(BeanValidatorService.class);
+ messages = validatorService.validateObject(context, value, getGroups());
+ if (!messages.isEmpty()) {
+ context.renderResponse();
+ // send all validation messages.
+ String clientId = getClientId(context);
+ for (String msg : messages) {
+ String summary = null != getSummary() ? getSummary() : msg;
+ context.addMessage(clientId, new
FacesMessage(FacesMessage.SEVERITY_ERROR, summary, msg));
}
-
- } else {
- throw new FacesException("Validator " +
FacesBeanValidator.BEAN_VALIDATOR_TYPE
- + " does not implement GraphValidator");
}
}
Modified:
branches/4.0.0.CR1/ui/validator/ui/src/main/java/org/richfaces/component/behavior/ClientValidatorImpl.java
===================================================================
---
branches/4.0.0.CR1/ui/validator/ui/src/main/java/org/richfaces/component/behavior/ClientValidatorImpl.java 2011-02-25
20:48:14 UTC (rev 21943)
+++
branches/4.0.0.CR1/ui/validator/ui/src/main/java/org/richfaces/component/behavior/ClientValidatorImpl.java 2011-02-25
23:29:51 UTC (rev 21944)
@@ -31,6 +31,7 @@
import javax.el.ValueExpression;
import javax.faces.FacesException;
import javax.faces.application.Application;
+import javax.faces.application.FacesMessage;
import javax.faces.component.ActionSource;
import javax.faces.component.EditableValueHolder;
import javax.faces.component.NamingContainer;
@@ -54,6 +55,7 @@
import org.richfaces.cdk.annotations.Tag;
import org.richfaces.cdk.annotations.TagType;
import org.richfaces.component.ClientSideMessage;
+import org.richfaces.javascript.JavaScriptService;
import org.richfaces.log.Logger;
import org.richfaces.log.RichfacesLogger;
import org.richfaces.renderkit.html.ClientValidatorRenderer;
@@ -116,12 +118,10 @@
if(partialViewContext.isAjaxRequest()){
UIComponent component = event.getComponent();
if(component instanceof EditableValueHolder){
- EditableValueHolder input = (EditableValueHolder) component;
- Set<UIComponent> messages = getMessages(facesContext, component);
- Collection<String> renderIds = partialViewContext.getRenderIds();
- for (UIComponent uiComponent : messages) {
- renderIds.add(uiComponent.getClientId(facesContext));
- }
+ String clientId = component.getClientId(facesContext);
+ Iterator<FacesMessage> messages =
facesContext.getMessages(clientId);
+ JavaScriptService javaScriptService =
ServiceTracker.getService(JavaScriptService.class);
+ javaScriptService.addPageReadyScript(facesContext, new
MessageUpdateScript(clientId,messages));
}
}
super.broadcast(event);
@@ -282,15 +282,17 @@
Validator[] facesValidators = input.getValidators();
FacesContext facesContext = context.getFacesContext();
if (facesValidators.length > 0) {
+ boolean beanValidatorsProcessed = false;
FacesValidatorService facesValidatorService =
ServiceTracker.getService(facesContext,
FacesValidatorService.class);
for (Validator validator : facesValidators) {
if (validator instanceof BeanValidator || validator instanceof
FacesBeanValidator) {
ValueExpression valueExpression =
component.getValueExpression(VALUE);
- if (null != valueExpression) {
+ if (null != valueExpression && !beanValidatorsProcessed)
{
BeanValidatorService beanValidatorService =
ServiceTracker.getService(facesContext,
BeanValidatorService.class);
validators.addAll(beanValidatorService.getConstrains(facesContext, valueExpression,
getGroups()));
+ beanValidatorsProcessed = true;
}
} else {
validators.add(facesValidatorService.getValidatorDescription(facesContext, input,
validator));
Added:
branches/4.0.0.CR1/ui/validator/ui/src/main/java/org/richfaces/component/behavior/MessageUpdateScript.java
===================================================================
---
branches/4.0.0.CR1/ui/validator/ui/src/main/java/org/richfaces/component/behavior/MessageUpdateScript.java
(rev 0)
+++
branches/4.0.0.CR1/ui/validator/ui/src/main/java/org/richfaces/component/behavior/MessageUpdateScript.java 2011-02-25
23:29:51 UTC (rev 21944)
@@ -0,0 +1,45 @@
+package org.richfaces.component.behavior;
+
+import java.io.IOException;
+import java.util.Iterator;
+
+import javax.faces.application.FacesMessage;
+
+
+import org.ajax4jsf.javascript.JSFunction;
+import org.ajax4jsf.javascript.ScriptString;
+import org.ajax4jsf.javascript.ScriptStringBase;
+import org.richfaces.javascript.Message;
+
+import com.google.common.base.Function;
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.Iterators;
+
+public class MessageUpdateScript extends ScriptStringBase implements ScriptString {
+
+ private static final Function<? super FacesMessage, Message>
MESSAGES_TRANSFORMER = new Function<FacesMessage, Message>() {
+
+ public Message apply(FacesMessage msg) {
+ return new Message(msg);
+ }
+ };
+ private final ImmutableList<Message> messages;
+ private final String clientId;
+
+ public MessageUpdateScript(String clientId,Iterator<FacesMessage> messages) {
+ this.clientId = clientId;
+ this.messages = ImmutableList.copyOf(Iterators.transform(messages,
MESSAGES_TRANSFORMER));
+ }
+
+ public void appendScript(Appendable target) throws IOException {
+ JSFunction resetMessages = new
JSFunction("RichFaces.csv.clearMessage",clientId);
+ resetMessages.appendScript(target);
+ target.append(';');
+ for (Message message : messages) {
+ JSFunction sendMessage = new
JSFunction("RichFaces.csv.sendMessage",clientId,message);
+ sendMessage.appendScript(target);
+ target.append(';');
+ }
+ }
+
+}
Property changes on:
branches/4.0.0.CR1/ui/validator/ui/src/main/java/org/richfaces/component/behavior/MessageUpdateScript.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Modified:
branches/4.0.0.CR1/ui/validator/ui/src/main/java/org/richfaces/renderkit/html/AjaxOnlyScript.java
===================================================================
---
branches/4.0.0.CR1/ui/validator/ui/src/main/java/org/richfaces/renderkit/html/AjaxOnlyScript.java 2011-02-25
20:48:14 UTC (rev 21943)
+++
branches/4.0.0.CR1/ui/validator/ui/src/main/java/org/richfaces/renderkit/html/AjaxOnlyScript.java 2011-02-25
23:29:51 UTC (rev 21944)
@@ -1,15 +1,18 @@
package org.richfaces.renderkit.html;
import java.io.IOException;
-import java.util.Collections;
import org.richfaces.resource.ResourceKey;
+import com.google.common.collect.ImmutableSet;
+
public class AjaxOnlyScript extends ValidatorScriptBase {
- public static final Iterable<ResourceKey> AJAX_LIBRARIES =
Collections.singleton(ResourceKey.create("ajax.reslib",
- "org.richfaces"));
+ public static final ResourceKey AJAX_RESOURCE =
ResourceKey.create("ajax.reslib",
+ "org.richfaces");
+ public static final Iterable<ResourceKey> AJAX_LIBRARIES =
ImmutableSet.of(AJAX_RESOURCE,ClientOnlyScript.CSV_RESOURCE);
+
private final String ajaxScript;
public AjaxOnlyScript(String ajaxScript) {
Modified:
branches/4.0.0.CR1/ui/validator/ui/src/main/java/org/richfaces/renderkit/html/ClientAndAjaxScript.java
===================================================================
---
branches/4.0.0.CR1/ui/validator/ui/src/main/java/org/richfaces/renderkit/html/ClientAndAjaxScript.java 2011-02-25
20:48:14 UTC (rev 21943)
+++
branches/4.0.0.CR1/ui/validator/ui/src/main/java/org/richfaces/renderkit/html/ClientAndAjaxScript.java 2011-02-25
23:29:51 UTC (rev 21944)
@@ -5,7 +5,8 @@
import org.richfaces.resource.ResourceKey;
-import com.google.common.collect.Iterables;
+import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.ImmutableSet.Builder;
public class ClientAndAjaxScript extends ClientOnlyScript{
@@ -19,7 +20,10 @@
Collection<? extends LibraryScriptFunction> validatorScripts, String
ajaxScript) {
super(clientSideConverterScript,validatorScripts);
this.ajaxScript = ajaxScript;
- resources =
Iterables.concat(AjaxOnlyScript.AJAX_LIBRARIES,super.getResources());
+ Builder<ResourceKey> builder = ImmutableSet.<ResourceKey>builder();
+ builder.add(AjaxOnlyScript.AJAX_RESOURCE);
+ builder.addAll(super.getResources());
+ resources = builder.build();
}
Modified:
branches/4.0.0.CR1/ui/validator/ui/src/main/java/org/richfaces/renderkit/html/ClientOnlyScript.java
===================================================================
---
branches/4.0.0.CR1/ui/validator/ui/src/main/java/org/richfaces/renderkit/html/ClientOnlyScript.java 2011-02-25
20:48:14 UTC (rev 21943)
+++
branches/4.0.0.CR1/ui/validator/ui/src/main/java/org/richfaces/renderkit/html/ClientOnlyScript.java 2011-02-25
23:29:51 UTC (rev 21944)
@@ -15,7 +15,7 @@
public class ClientOnlyScript extends ValidatorScriptBase {
- private static final ResourceKey CSV_RESOURCE =
ResourceKey.create("csv.reslib", "org.richfaces");
+ public static final ResourceKey CSV_RESOURCE =
ResourceKey.create("csv.reslib", "org.richfaces");
protected final LibraryScriptFunction converter;
protected final ImmutableList<? extends LibraryScriptFunction> validators;
private final ImmutableSet<ResourceKey> resources;
@@ -26,13 +26,13 @@
this.converter = clientSideConverterScript;
this.validators = ImmutableList.copyOf(validatorScripts);
LinkedHashSet<ResourceKey> resources = Sets.newLinkedHashSet();
+ resources.add(CSV_RESOURCE);
if (null != converter) {
Iterables.addAll(resources, converter.getResources());
}
for (LibraryScriptFunction scriptString : validators) {
Iterables.addAll(resources, scriptString.getResources());
}
- resources.add(CSV_RESOURCE);
this.resources = ImmutableSet.copyOf(resources);
}
Modified:
branches/4.0.0.CR1/ui/validator/ui/src/main/java/org/richfaces/validator/BeanValidatorServiceImpl.java
===================================================================
---
branches/4.0.0.CR1/ui/validator/ui/src/main/java/org/richfaces/validator/BeanValidatorServiceImpl.java 2011-02-25
20:48:14 UTC (rev 21943)
+++
branches/4.0.0.CR1/ui/validator/ui/src/main/java/org/richfaces/validator/BeanValidatorServiceImpl.java 2011-02-25
23:29:51 UTC (rev 21944)
@@ -450,13 +450,15 @@
}
private Collection<String>
extractMessages(Set<ConstraintViolation<Object>> violations) {
- Collection<String> messages = null;
+ Collection<String> messages;
if (null != violations && violations.size() > 0) {
messages = new ArrayList<String>(violations.size());
for (ConstraintViolation<? extends Object> constraintViolation :
violations) {
messages.add(constraintViolation.getMessage());
}
+ } else {
+ messages = Collections.emptySet();
}
return messages;
}
Modified:
branches/4.0.0.CR1/ui/validator/ui/src/main/java/org/richfaces/validator/FacesBeanValidator.java
===================================================================
---
branches/4.0.0.CR1/ui/validator/ui/src/main/java/org/richfaces/validator/FacesBeanValidator.java 2011-02-25
20:48:14 UTC (rev 21943)
+++
branches/4.0.0.CR1/ui/validator/ui/src/main/java/org/richfaces/validator/FacesBeanValidator.java 2011-02-25
23:29:51 UTC (rev 21944)
@@ -37,8 +37,6 @@
import org.richfaces.application.ServiceTracker;
import org.richfaces.cdk.annotations.JsfValidator;
-import org.richfaces.cdk.annotations.Tag;
-import org.richfaces.cdk.annotations.TagType;
import com.google.common.base.Strings;
@@ -48,7 +46,7 @@
* @author asmirnov
*
*/
-@JsfValidator(id=FacesBeanValidator.BEAN_VALIDATOR_TYPE,tag=(a)Tag(name="beanValidator",type=TagType.Facelets))
+(a)JsfValidator(id=FacesBeanValidator.BEAN_VALIDATOR_TYPE)
public class FacesBeanValidator implements Serializable, Validator, GraphValidator {
public static final String BEAN_VALIDATOR_TYPE =
"org.richfaces.BeanValidator";
Modified: branches/4.0.0.CR1/ui/validator/ui/src/main/resources/META-INF/csv.xml
===================================================================
--- branches/4.0.0.CR1/ui/validator/ui/src/main/resources/META-INF/csv.xml 2011-02-25
20:48:14 UTC (rev 21943)
+++ branches/4.0.0.CR1/ui/validator/ui/src/main/resources/META-INF/csv.xml 2011-02-25
23:29:51 UTC (rev 21944)
@@ -176,4 +176,20 @@
</resource>
<function>RichFaces.csv.validateMax</function>
</component>
+ <component>
+ <type>javax.validation.constraints.AssertTrue</type>
+ <resource>
+ <name>csv.reslib</name>
+ <library>org.richfaces</library>
+ </resource>
+ <function>RichFaces.csv.validateTrue</function>
+ </component>
+ <component>
+ <type>javax.validation.constraints.AssertFalse</type>
+ <resource>
+ <name>csv.reslib</name>
+ <library>org.richfaces</library>
+ </resource>
+ <function>RichFaces.csv.validateFalse</function>
+ </component>
</scripts>
\ No newline at end of file
Modified:
branches/4.0.0.CR1/ui/validator/ui/src/main/resources/META-INF/resources/org.richfaces/richfaces-csv.js
===================================================================
---
branches/4.0.0.CR1/ui/validator/ui/src/main/resources/META-INF/resources/org.richfaces/richfaces-csv.js 2011-02-25
20:48:14 UTC (rev 21943)
+++
branches/4.0.0.CR1/ui/validator/ui/src/main/resources/META-INF/resources/org.richfaces/richfaces-csv.js 2011-02-25
23:29:51 UTC (rev 21944)
@@ -81,31 +81,33 @@
} else {
convertedValue = value;
}
+ var result = true
var validators = params.v;
if (validators) {
var validatorFunction,validator;
- try {
for (i=0;i<validators.length;i++) {
- validator=validators[i];
- validatorFunction = validator.f;
- if (validatorFunction) {
- validatorFunction(convertedValue,getLabel(validator,id),
validator.p,validator.m);
+ try {
+ validator=validators[i];
+ validatorFunction = validator.f;
+ if (validatorFunction) {
+ validatorFunction(convertedValue,getLabel(validator,id),
validator.p,validator.m);
+ }
+ } catch (e) {
+ e.severity=2;
+ rf.csv.sendMessage(id, e);
+ result = false;
}
}
- } catch (e) {
- e.severity=2;
- rf.csv.sendMessage(id, e);
- return false;
- }
}
- if(!params.da && params.a){
+ if(!result && !params.da && params.a){
params.a.call(element,event,id);
}
- return true;
+ return result;
},
});
- /* convert all natural number formats
+ /*
+ * convert all natural number formats
*
*/
var _convertNatural = function(value,label,msg,min,max,sample){
@@ -172,8 +174,8 @@
});
var validateRange = function(value,label,params,msg) {
- var isMinSet = typeof params.min === "number" ;//&& params.min
>0;
- var isMaxSet = typeof params.max === "number" ;//&& params.max
>0;
+ var isMinSet = typeof params.min === "number" ;// && params.min
>0;
+ var isMaxSet = typeof params.max === "number" ;// && params.max
>0;
if (isMaxSet && value > params.max) {
throw
rf.csv.interpolateMessage(msg,isMinSet?[params.min,params.max,label]:[params.max,label]);
@@ -252,6 +254,16 @@
throw rf.csv.interpolateMessage(msg, [label]);
}
},
+ "validateTrue": function (value,label,params,msg) {
+ if (!value ) {
+ throw msg;
+ }
+ },
+ "validateFalse": function (value,label,params,msg) {
+ if (value ) {
+ throw msg;
+ }
+ },
"validateMax": function (value,label,params,msg) {
if (value > params.value ) {
throw msg;