Author: nbelaevski
Date: 2011-02-25 10:07:34 -0500 (Fri, 25 Feb 2011)
New Revision: 21937
Modified:
branches/4.0.0.CR1/ui/validator/ui/src/main/java/org/richfaces/view/facelets/html/GraphValidatorHandler.java
Log:
https://issues.jboss.org/browse/RF-10613
Modified:
branches/4.0.0.CR1/ui/validator/ui/src/main/java/org/richfaces/view/facelets/html/GraphValidatorHandler.java
===================================================================
---
branches/4.0.0.CR1/ui/validator/ui/src/main/java/org/richfaces/view/facelets/html/GraphValidatorHandler.java 2011-02-25
14:39:11 UTC (rev 21936)
+++
branches/4.0.0.CR1/ui/validator/ui/src/main/java/org/richfaces/view/facelets/html/GraphValidatorHandler.java 2011-02-25
15:07:34 UTC (rev 21937)
@@ -27,8 +27,13 @@
import javax.el.ELException;
import javax.faces.FacesException;
import javax.faces.component.EditableValueHolder;
+import javax.faces.component.StateHolder;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
+import javax.faces.event.AbortProcessingException;
+import javax.faces.event.ComponentSystemEvent;
+import javax.faces.event.ComponentSystemEventListener;
+import javax.faces.event.PostAddToViewEvent;
import javax.faces.validator.BeanValidator;
import javax.faces.validator.Validator;
import javax.faces.view.facelets.ComponentConfig;
@@ -46,6 +51,31 @@
private static final String BUILT_IN_BEAN_VALIDATOR_ATTRIBUTE_NAME =
GraphValidatorHandler.class.getName()
+ ":BUILT_IN_BEAN_VALIDATOR_ATTRIBUTE_NAME";
+ private class FacesBeanValidatorAddListener implements ComponentSystemEventListener,
StateHolder {
+
+ public void processEvent(ComponentSystemEvent event) throws
AbortProcessingException {
+ FacesContext context = FacesContext.getCurrentInstance();
+ Validator childrenValidator = createChildrenValidator(context,
event.getComponent());
+ setupValidators(context, event.getComponent(), childrenValidator);
+ }
+
+ public Object saveState(FacesContext context) {
+ throw new UnsupportedOperationException();
+ }
+
+ public void restoreState(FacesContext context, Object state) {
+ throw new UnsupportedOperationException();
+ }
+
+ public boolean isTransient() {
+ return true;
+ }
+
+ public void setTransient(boolean newTransientValue) {
+ throw new UnsupportedOperationException();
+ }
+ }
+
public GraphValidatorHandler(ComponentConfig config) {
super(config);
}
@@ -113,13 +143,20 @@
}
}
+ private Validator createChildrenValidator(FacesContext context, UIComponent c) {
+ AbstractGraphValidator graphValidator = (AbstractGraphValidator) c;
+
+ return graphValidator.createChildrenValidator(context);
+ }
+
@Override
public void applyNextHandler(FaceletContext ctx, UIComponent c) throws IOException,
FacesException, ELException {
super.applyNextHandler(ctx, c);
- AbstractGraphValidator graphValidator = (AbstractGraphValidator) c;
- Validator childrenValidator =
graphValidator.createChildrenValidator(ctx.getFacesContext());
-
- setupValidators(ctx.getFacesContext(), graphValidator, childrenValidator);
+ if (c.isInView()) {
+ setupValidators(ctx.getFacesContext(), c,
createChildrenValidator(ctx.getFacesContext(), c));
+ } else {
+ c.subscribeToEvent(PostAddToViewEvent.class, new
FacesBeanValidatorAddListener());
+ }
}
}