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 fcb2333..47c930e 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
@@ -18,18 +18,15 @@
*/
package org.apache.myfaces.context.servlet;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.EnumSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.logging.Level;
-import java.util.logging.Logger;
+import org.apache.myfaces.application.ResourceHandlerImpl;
+import org.apache.myfaces.context.PartialResponseWriterImpl;
+import org.apache.myfaces.context.RequestViewContext;
+import org.apache.myfaces.renderkit.html.HtmlResponseStateManager;
+import org.apache.myfaces.shared.renderkit.JSFAttr;
+import org.apache.myfaces.shared.util.StringUtils;
import javax.faces.FactoryFinder;
+import javax.faces.component.EditableValueHolder;
import javax.faces.component.UIComponent;
import javax.faces.component.UIViewParameter;
import javax.faces.component.UIViewRoot;
@@ -49,13 +46,16 @@
import javax.faces.render.RenderKit;
import javax.faces.render.RenderKitFactory;
import javax.faces.view.ViewMetadata;
-import org.apache.myfaces.application.ResourceHandlerImpl;
-
-import org.apache.myfaces.context.PartialResponseWriterImpl;
-import org.apache.myfaces.context.RequestViewContext;
-import org.apache.myfaces.renderkit.html.HtmlResponseStateManager;
-import org.apache.myfaces.shared.renderkit.JSFAttr;
-import org.apache.myfaces.shared.util.StringUtils;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.EnumSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.logging.Level;
+import java.util.logging.Logger;
public class PartialViewContextImpl extends PartialViewContext
{
@@ -79,6 +79,11 @@
private static final Set<VisitHint> PARTIAL_RENDER_HINTS =
Collections.unmodifiableSet(EnumSet.of(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 _facesContext = null;
private boolean _released = false;
// Cached values, since their parent methods could be called
@@ -481,7 +486,9 @@
if (isResetValues())
{
- viewRoot.resetValues(_facesContext, getRenderIds());
+ VisitContext visitContext = VisitContext.createVisitContext(_facesContext, getRenderIds(),
+ RESET_VALUES_HINTS);
+ viewRoot.visitTree(visitContext, RESET_VALUES_CALLBACK);
}
if (pvc.isRenderAll())
@@ -613,7 +620,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
{