MYFACES-4650
diff --git a/impl/src/main/java/org/apache/myfaces/context/servlet/PartialViewContextImpl.java b/impl/src/main/java/org/apache/myfaces/context/servlet/PartialViewContextImpl.java
index 47bddf7..003912b 100644
--- a/impl/src/main/java/org/apache/myfaces/context/servlet/PartialViewContextImpl.java
+++ b/impl/src/main/java/org/apache/myfaces/context/servlet/PartialViewContextImpl.java
@@ -30,6 +30,7 @@
import java.util.logging.Logger;
import javax.faces.FactoryFinder;
+import javax.faces.component.EditableValueHolder;
import javax.faces.component.UIComponent;
import javax.faces.component.UIViewParameter;
import javax.faces.component.UIViewRoot;
@@ -72,6 +73,11 @@
private static final Set<VisitHint> PARTIAL_EXECUTE_HINTS = Collections.unmodifiableSet(
EnumSet.of(VisitHint.EXECUTE_LIFECYCLE, VisitHint.SKIP_UNRENDERED));
+ private static final VisitCallback RESET_VALUES_CALLBACK = new ResetValuesCallback();
+
+ private static final Set<VisitHint> RESET_VALUES_HINTS =
+ Collections.unmodifiableSet(EnumSet.of(VisitHint.SKIP_UNRENDERED));
+
private FacesContext context = null;
private boolean _released = false;
// Cached values, since their parent methods could be called
@@ -441,7 +447,9 @@
if (isResetValues())
{
- viewRoot.resetValues(context, getRenderIds());
+ VisitContext visitContext = VisitContext.createVisitContext(context, getRenderIds(),
+ RESET_VALUES_HINTS);
+ viewRoot.visitTree(visitContext, RESET_VALUES_CALLBACK);
}
if (pvc.isRenderAll())
@@ -563,7 +571,20 @@
}
}
-
+
+ // same like UIViewRoot#ResetValuesCallback
+ private static class ResetValuesCallback implements VisitCallback
+ {
+ public VisitResult visit(VisitContext context, UIComponent target)
+ {
+ if (target instanceof EditableValueHolder)
+ {
+ ((EditableValueHolder)target).resetValue();
+ }
+ return VisitResult.ACCEPT;
+ }
+ }
+
private void processRenderResource(FacesContext facesContext, PartialResponseWriter writer, RequestViewContext rvc,
List<UIComponent> updatedComponents, String target) throws IOException
{