You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by gp...@apache.org on 2011/02/18 12:26:55 UTC

svn commit: r1071968 - in /myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl: scope/conversation/ util/

Author: gpetracek
Date: Fri Feb 18 11:26:54 2011
New Revision: 1071968

URL: http://svn.apache.org/viewvc?rev=1071968&view=rev
Log:
EXTCDI-131 store new view-id as early as possible

Modified:
    myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/scope/conversation/WindowContextAwareViewHandler.java
    myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/scope/conversation/WindowContextManagerObserver.java
    myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/util/ConversationUtils.java

Modified: myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/scope/conversation/WindowContextAwareViewHandler.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/scope/conversation/WindowContextAwareViewHandler.java?rev=1071968&r1=1071967&r2=1071968&view=diff
==============================================================================
--- myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/scope/conversation/WindowContextAwareViewHandler.java (original)
+++ myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/scope/conversation/WindowContextAwareViewHandler.java Fri Feb 18 11:26:54 2011
@@ -20,12 +20,16 @@ package org.apache.myfaces.extensions.cd
 
 import org.apache.myfaces.extensions.cdi.jsf.impl.scope.conversation.spi.WindowHandler;
 import org.apache.myfaces.extensions.cdi.jsf.impl.util.ConversationUtils;
+import static org.apache.myfaces.extensions.cdi.jsf.impl.util.ConversationUtils.storeViewIdAsNewViewId;
 import org.apache.myfaces.extensions.cdi.core.api.Deactivatable;
+import org.apache.myfaces.extensions.cdi.core.api.scope.conversation.WindowContext;
 import org.apache.myfaces.extensions.cdi.core.impl.util.ClassDeactivation;
+import org.apache.myfaces.extensions.cdi.core.impl.scope.conversation.spi.WindowContextManager;
 
 import javax.faces.application.ViewHandlerWrapper;
 import javax.faces.application.ViewHandler;
 import javax.faces.context.FacesContext;
+import javax.faces.component.UIViewRoot;
 
 /**
  * @author Gerhard Petracek
@@ -77,4 +81,32 @@ public class WindowContextAwareViewHandl
     {
         return ClassDeactivation.isClassActivated(getClass());
     }
+
+    @Override
+    public UIViewRoot restoreView(FacesContext facesContext, String viewId)
+    {
+        if(isWindowIdAvailable(facesContext))
+        {
+            WindowContext windowContext = ConversationUtils.getWindowContextManager().getCurrentWindowContext();
+
+            if(windowContext != null)
+            {
+                //see EXTCDI-131
+                storeViewIdAsNewViewId(windowContext, viewId);
+            }
+        }
+
+        return super.restoreView(facesContext, viewId);
+    }
+
+    /**
+     * check if the window-id has been restored before the restore-view phase
+     * @param facesContext current faces-context
+     * @return true if the window-id has been restored before, false otherwise
+     */
+    private boolean isWindowIdAvailable(FacesContext facesContext)
+    {
+        return facesContext.getExternalContext().getRequestMap()
+                        .containsKey(WindowContextManager.WINDOW_CONTEXT_ID_PARAMETER_KEY);
+    }
 }

Modified: myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/scope/conversation/WindowContextManagerObserver.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/scope/conversation/WindowContextManagerObserver.java?rev=1071968&r1=1071967&r2=1071968&view=diff
==============================================================================
--- myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/scope/conversation/WindowContextManagerObserver.java (original)
+++ myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/scope/conversation/WindowContextManagerObserver.java Fri Feb 18 11:26:54 2011
@@ -84,7 +84,7 @@ final class WindowContextManagerObserver
             if(active)
             {
                 RequestCache.setCurrentWindowContext(windowContextManager.getWindowContext(windowId));
-                //just for supporting e.g. el-expressions
+                //don't remove it - e.g. needed as marker for the view-handler
                 phaseEvent.getFacesContext().getExternalContext().getRequestMap()
                         .put(WindowContextManager.WINDOW_CONTEXT_ID_PARAMETER_KEY, windowId);
             }

Modified: myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/util/ConversationUtils.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/util/ConversationUtils.java?rev=1071968&r1=1071967&r2=1071968&view=diff
==============================================================================
--- myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/util/ConversationUtils.java (original)
+++ myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/util/ConversationUtils.java Fri Feb 18 11:26:54 2011
@@ -234,6 +234,11 @@ public class ConversationUtils
     public static void storeCurrentViewIdAsNewViewId(FacesContext facesContext, WindowContext windowContext)
     {
         String newViewId = facesContext.getViewRoot().getViewId();
+        storeViewIdAsNewViewId(windowContext, newViewId);
+    }
+
+    public static void storeViewIdAsNewViewId(WindowContext windowContext, String newViewId)
+    {
         windowContext.setAttribute(NEW_VIEW_ID_KEY, newViewId);
     }