From 0d17de3aad039711d68510597d2d49d5596a379b Mon Sep 17 00:00:00 2001 From: Phillip Webb Date: Wed, 30 Jan 2013 13:56:24 -0800 Subject: [PATCH] Ensure saveState() is always called Update JsfView to ensure that saveState() called when processing events. This is required to ensure that the Mojarra StateContext will unsubscribe listeners from the UIViewRoot. Issue: SWF-1577 --- .../org/springframework/faces/webflow/JsfView.java | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/spring-faces/src/main/java/org/springframework/faces/webflow/JsfView.java b/spring-faces/src/main/java/org/springframework/faces/webflow/JsfView.java index c9f08d49..7f40eeb1 100644 --- a/spring-faces/src/main/java/org/springframework/faces/webflow/JsfView.java +++ b/spring-faces/src/main/java/org/springframework/faces/webflow/JsfView.java @@ -85,11 +85,6 @@ public class JsfView implements View { try { logger.debug("Asking faces lifecycle to render"); this.facesLifecycle.render(facesContext); - - // Ensure serialized view state is always updated even if JSF didn't call StateManager.writeState(). - if (this.requestContext.getExternalContext().isAjaxRequest()) { - saveState(); - } } finally { logger.debug("View rendering complete"); facesContext.responseComplete(); @@ -111,7 +106,10 @@ public class JsfView implements View { */ public void processUserEvent() { FacesContext facesContext = FlowFacesContext.getCurrentInstance(); - facesContext.setViewRoot(this.viewRoot); + + // Ensure serialized view state is always updated even if JSF didn't call StateManager.writeState(). SWF-1577 + saveState(); + // Must respect these flags in case user set them during RESTORE_VIEW phase if (!facesContext.getRenderResponse() && !facesContext.getResponseComplete()) { this.facesLifecycle.execute(facesContext);