You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by lu...@apache.org on 2011/05/11 22:28:17 UTC

svn commit: r1102072 - in /myfaces/core/branches/2.0.x/impl/src: main/java/org/apache/myfaces/application/ main/java/org/apache/myfaces/renderkit/html/ main/java/org/apache/myfaces/view/facelets/ test/java/org/apache/myfaces/application/

Author: lu4242
Date: Wed May 11 20:28:16 2011
New Revision: 1102072

URL: http://svn.apache.org/viewvc?rev=1102072&view=rev
Log:
MYFACES-3137 Align ResponseStateManager implementation with the spec

Modified:
    myfaces/core/branches/2.0.x/impl/src/main/java/org/apache/myfaces/application/StateManagerImpl.java
    myfaces/core/branches/2.0.x/impl/src/main/java/org/apache/myfaces/renderkit/html/HtmlResponseStateManager.java
    myfaces/core/branches/2.0.x/impl/src/main/java/org/apache/myfaces/view/facelets/DefaultFaceletsStateManagementStrategy.java
    myfaces/core/branches/2.0.x/impl/src/test/java/org/apache/myfaces/application/StateManagerImplTest.java

Modified: myfaces/core/branches/2.0.x/impl/src/main/java/org/apache/myfaces/application/StateManagerImpl.java
URL: http://svn.apache.org/viewvc/myfaces/core/branches/2.0.x/impl/src/main/java/org/apache/myfaces/application/StateManagerImpl.java?rev=1102072&r1=1102071&r2=1102072&view=diff
==============================================================================
--- myfaces/core/branches/2.0.x/impl/src/main/java/org/apache/myfaces/application/StateManagerImpl.java (original)
+++ myfaces/core/branches/2.0.x/impl/src/main/java/org/apache/myfaces/application/StateManagerImpl.java Wed May 11 20:28:16 2011
@@ -38,8 +38,6 @@ import javax.faces.render.ResponseStateM
 import javax.faces.view.StateManagementStrategy;
 import javax.faces.view.ViewDeclarationLanguage;
 
-import org.apache.myfaces.application.jsp.JspStateManagerImpl;
-
 public class StateManagerImpl extends StateManager
 {
     private static final Logger log = Logger.getLogger(StateManagerImpl.class.getName());
@@ -49,11 +47,8 @@ public class StateManagerImpl extends St
     
     private RenderKitFactory _renderKitFactory = null;
     
-    private StateCache _stateCache;
-    
     public StateManagerImpl()
     {
-        _stateCache = new StateCacheImpl();
     }
 
     @Override
@@ -120,7 +115,7 @@ public class StateManagerImpl extends St
             RenderKit renderKit = getRenderKitFactory().getRenderKit(facesContext, renderKitId);
             ResponseStateManager responseStateManager = renderKit.getResponseStateManager();
 
-            Object state = getStateCache().restoreSerializedView(facesContext, viewId, responseStateManager.getState(facesContext, viewId));
+            Object state = responseStateManager.getState(facesContext, viewId);
 
             if (state != null) {
                 Object[] stateArray = (Object[])state;
@@ -196,9 +191,6 @@ public class StateManagerImpl extends St
             if (log.isLoggable(Level.FINEST)) log.finest("Processing saveSerializedView - new serialized view created");
         }
 
-        
-        getStateCache().saveSerializedView(facesContext, serializedView);
-        
         if (log.isLoggable(Level.FINEST)) log.finest("Exiting saveView");
 
         return serializedView;
@@ -286,13 +278,15 @@ public class StateManagerImpl extends St
         RenderKit renderKit = getRenderKitFactory().getRenderKit(facesContext, uiViewRoot.getRenderKitId());
         ResponseStateManager responseStateManager = renderKit.getResponseStateManager();
 
-        responseStateManager.writeState(facesContext, 
-                getStateCache().encodeSerializedState(facesContext, state));
+        responseStateManager.writeState(facesContext, state);
 
         if (log.isLoggable(Level.FINEST)) log.finest("Exiting writeState");
 
     }
 
+    /*
+     * NOTE: This is not required anymore, because all logic related to state storing or caching on session has
+     * been moved to ResponseStateManager
     @Override
     public String getViewState(FacesContext facesContext)
     {
@@ -312,9 +306,9 @@ public class StateManagerImpl extends St
         }
         Object[] savedState = (Object[]) saveView(facesContext);
         
-        return facesContext.getRenderKit().getResponseStateManager().getViewState(facesContext,
-                getStateCache().encodeSerializedState(facesContext, savedState));
-    }
+        return facesContext.getRenderKit().getResponseStateManager().getViewState(facesContext, savedState);
+
+    }*/
 
     //helpers
 
@@ -327,16 +321,4 @@ public class StateManagerImpl extends St
         return _renderKitFactory;
     }
 
-
-    
-    protected StateCache getStateCache()
-    {
-        return _stateCache;
-    }
-
-    protected void setStateCache(StateCache stateCache)
-    {
-        this._stateCache = stateCache;
-    }
-
 }

Modified: myfaces/core/branches/2.0.x/impl/src/main/java/org/apache/myfaces/renderkit/html/HtmlResponseStateManager.java
URL: http://svn.apache.org/viewvc/myfaces/core/branches/2.0.x/impl/src/main/java/org/apache/myfaces/renderkit/html/HtmlResponseStateManager.java?rev=1102072&r1=1102071&r2=1102072&view=diff
==============================================================================
--- myfaces/core/branches/2.0.x/impl/src/main/java/org/apache/myfaces/renderkit/html/HtmlResponseStateManager.java (original)
+++ myfaces/core/branches/2.0.x/impl/src/main/java/org/apache/myfaces/renderkit/html/HtmlResponseStateManager.java Wed May 11 20:28:16 2011
@@ -31,12 +31,16 @@ import javax.faces.context.ResponseWrite
 import javax.faces.render.RenderKitFactory;
 import javax.faces.render.ResponseStateManager;
 
+import org.apache.myfaces.application.StateCache;
+import org.apache.myfaces.application.StateCacheImpl;
+import org.apache.myfaces.buildtools.maven2.plugin.builder.annotation.JSFWebConfigParam;
 import org.apache.myfaces.renderkit.MyfacesResponseStateManager;
 import org.apache.myfaces.shared_impl.config.MyfacesConfig;
 import org.apache.myfaces.shared_impl.renderkit.html.HTML;
 import org.apache.myfaces.shared_impl.renderkit.html.HtmlRendererUtils;
 import org.apache.myfaces.shared_impl.renderkit.html.util.JavascriptUtils;
 import org.apache.myfaces.shared_impl.util.StateUtils;
+import org.apache.myfaces.shared_impl.util.WebConfigParamUtils;
 
 /**
  * @author Manfred Geiler (latest modification by $Author$)
@@ -52,20 +56,51 @@ public class HtmlResponseStateManager ex
     private static final int VIEWID_PARAM = 2;
 
     public static final String STANDARD_STATE_SAVING_PARAM = "javax.faces.ViewState";
-
-    @Override
-    public void writeState(FacesContext facescontext, StateManager.SerializedView serializedview) throws IOException
+    
+    @JSFWebConfigParam(since="2.0.6", expectedValues="true, false", defaultValue="true")
+    public static final String INIT_PARAM_HANDLE_STATE_CACHING_MECHANICS = "org.apache.myfaces.HANDLE_STATE_CACHING_MECHANICS";
+    
+    private Boolean _handleStateCachingMechanics;
+    
+    private StateCache _stateCache;
+    
+    public HtmlResponseStateManager()
     {
-        ResponseWriter responseWriter = facescontext.getResponseWriter();
-
+        _stateCache = new StateCacheImpl();
+    }
+    
+    protected boolean isHandlingStateCachingMechanics(FacesContext facesContext)
+    {
+        if (_handleStateCachingMechanics == null)
+        {
+            _handleStateCachingMechanics = WebConfigParamUtils.getBooleanInitParameter(facesContext.getExternalContext(), INIT_PARAM_HANDLE_STATE_CACHING_MECHANICS, true);
+        }
+        return _handleStateCachingMechanics.booleanValue();
+    }
+    
+    public void writeState(FacesContext facesContext, Object state) throws IOException
+    {
+        Object[] token = null;
+        if (isHandlingStateCachingMechanics(facesContext))
+        {
+            getStateCache().saveSerializedView(facesContext, state);
+            
+            token = (Object[]) getStateCache().encodeSerializedState(facesContext, state);
+        }
+        else
+        {
+            token = (Object[]) state;
+        }
+        ResponseWriter responseWriter = facesContext.getResponseWriter();
+        
         Object[] savedState = new Object[3];
 
-        if (facescontext.getApplication().getStateManager().isSavingStateInClient(facescontext))
+        if (facesContext.getApplication().getStateManager().isSavingStateInClient(facesContext))
         {
             if (log.isLoggable(Level.FINEST))
                 log.finest("Writing state in client");
-            Object treeStruct = serializedview.getStructure();
-            Object compStates = serializedview.getState();
+            Object treeStruct = token[0];
+            Object compStates = token[1];
 
             if (treeStruct != null)
             {
@@ -92,7 +127,7 @@ public class HtmlResponseStateManager ex
             if (log.isLoggable(Level.FINEST))
                 log.finest("Writing state in server");
             // write viewSequence
-            Object treeStruct = serializedview.getStructure();
+            Object treeStruct = token[0];
             if (treeStruct != null)
             {
                 if (treeStruct instanceof String)
@@ -102,16 +137,16 @@ public class HtmlResponseStateManager ex
             }
         }
 
-        savedState[VIEWID_PARAM] = facescontext.getViewRoot().getViewId();
+        savedState[VIEWID_PARAM] = facesContext.getViewRoot().getViewId();
 
         if (log.isLoggable(Level.FINEST))
             log.finest("Writing view state and renderKit fields");
 
         // write the view state field
-        writeViewStateField(facescontext, responseWriter, savedState);
+        writeViewStateField(facesContext, responseWriter, savedState);
 
         // renderKitId field
-        writeRenderKitIdField(facescontext, responseWriter);
+        writeRenderKitIdField(facesContext, responseWriter);
     }
 
     private void writeViewStateField(FacesContext facesContext, ResponseWriter responseWriter, Object savedState)
@@ -163,9 +198,18 @@ public class HtmlResponseStateManager ex
             return null;
         }
 
-        return new Object[] { savedState[TREE_PARAM], savedState[STATE_PARAM] };
+        if (isHandlingStateCachingMechanics(facesContext))
+        {
+            return getStateCache().restoreSerializedView(facesContext, viewId, 
+                    new Object[] { savedState[TREE_PARAM], savedState[STATE_PARAM] });
+        }
+        else
+        {
+            return new Object[] { savedState[TREE_PARAM], savedState[STATE_PARAM] };
+        }
     }
 
+    /* There methods are no longer required
     @Override
     public Object getTreeStructureToRestore(FacesContext facesContext, String viewId)
     {
@@ -192,7 +236,7 @@ public class HtmlResponseStateManager ex
         }
 
         return savedState[STATE_PARAM];
-    }
+    }*/
 
     /**
      * Reconstructs the state from the "javax.faces.ViewState" request parameter.
@@ -256,6 +300,13 @@ public class HtmlResponseStateManager ex
             return null;
         }
         
+        if (isHandlingStateCachingMechanics(facesContext))
+        {
+            getStateCache().saveSerializedView(facesContext, state);
+
+            state = getStateCache().encodeSerializedState(facesContext, state);
+        }
+        
         Object treeStruct = null;
         Object compStates = null;
         
@@ -313,4 +364,15 @@ public class HtmlResponseStateManager ex
 
         return StateUtils.construct(savedState, facesContext.getExternalContext());
     }
+    
+    
+    protected StateCache getStateCache()
+    {
+        return _stateCache;
+    }
+
+    protected void setStateCache(StateCache stateCache)
+    {
+        this._stateCache = stateCache;
+    }
 }

Modified: myfaces/core/branches/2.0.x/impl/src/main/java/org/apache/myfaces/view/facelets/DefaultFaceletsStateManagementStrategy.java
URL: http://svn.apache.org/viewvc/myfaces/core/branches/2.0.x/impl/src/main/java/org/apache/myfaces/view/facelets/DefaultFaceletsStateManagementStrategy.java?rev=1102072&r1=1102071&r2=1102072&view=diff
==============================================================================
--- myfaces/core/branches/2.0.x/impl/src/main/java/org/apache/myfaces/view/facelets/DefaultFaceletsStateManagementStrategy.java (original)
+++ myfaces/core/branches/2.0.x/impl/src/main/java/org/apache/myfaces/view/facelets/DefaultFaceletsStateManagementStrategy.java Wed May 11 20:28:16 2011
@@ -117,14 +117,11 @@ public class DefaultFaceletsStateManagem
     
     private ViewDeclarationLanguageFactory _vdlFactory;
     
-    private StateCache stateCache;
-    
     public DefaultFaceletsStateManagementStrategy ()
     {
         _vdlFactory = (ViewDeclarationLanguageFactory)FactoryFinder.getFactory(FactoryFinder.VIEW_DECLARATION_LANGUAGE_FACTORY);
         //TODO: This object should be application scoped and shared
         //between jsp and facelets
-        this.stateCache = new StateCacheImpl();
     }
     
     @SuppressWarnings("unchecked")
@@ -143,7 +140,8 @@ public class DefaultFaceletsStateManagem
         // Get previous state from ResponseStateManager.
         manager = RendererUtils.getResponseStateManager (context, renderKitId);
         
-        state = (Object[]) getStateCache().restoreSerializedView(context, viewId, manager.getState(context, viewId));
+        //state = (Object[]) getStateCache().restoreSerializedView(context, viewId, manager.getState(context, viewId));
+        state = (Object[]) manager.getState(context, viewId);
         
         if (state == null)
         {
@@ -465,8 +463,10 @@ public class DefaultFaceletsStateManagem
         
             serializedView = new Object[] { null, states };
             
-            externalContext.getRequestMap().put(SERIALIZED_VIEW_REQUEST_ATTR,
-                    getStateCache().encodeSerializedState(context, serializedView));
+            //externalContext.getRequestMap().put(SERIALIZED_VIEW_REQUEST_ATTR,
+            //        getStateCache().encodeSerializedState(context, serializedView));
+
+            externalContext.getRequestMap().put(SERIALIZED_VIEW_REQUEST_ATTR, serializedView);
 
             /*
             if (context.getApplication().getStateManager().isSavingStateInClient(context))
@@ -488,7 +488,7 @@ public class DefaultFaceletsStateManagem
         
         //if (!context.getApplication().getStateManager().isSavingStateInClient(context))
         //{
-        getStateCache().saveSerializedView(context, serializedView);
+        //getStateCache().saveSerializedView(context, serializedView);
         //}
         
         return serializedView;
@@ -876,16 +876,6 @@ public class DefaultFaceletsStateManagem
     }
     */
     
-    public StateCache getStateCache()
-    {
-        return stateCache;
-    }
-
-    public void setStateCache(StateCache stateCache)
-    {
-        this.stateCache = stateCache;
-    }
-
     public static class PostAddPreRemoveFromViewListener implements SystemEventListener
     {
 

Modified: myfaces/core/branches/2.0.x/impl/src/test/java/org/apache/myfaces/application/StateManagerImplTest.java
URL: http://svn.apache.org/viewvc/myfaces/core/branches/2.0.x/impl/src/test/java/org/apache/myfaces/application/StateManagerImplTest.java?rev=1102072&r1=1102071&r2=1102072&view=diff
==============================================================================
--- myfaces/core/branches/2.0.x/impl/src/test/java/org/apache/myfaces/application/StateManagerImplTest.java (original)
+++ myfaces/core/branches/2.0.x/impl/src/test/java/org/apache/myfaces/application/StateManagerImplTest.java Wed May 11 20:28:16 2011
@@ -56,6 +56,7 @@ public class StateManagerImplTest extend
         //renderKit.setResponseStateManager(new HtmlResponseStateManager());
         //StateUtils.initSecret(servletContext);
         //servletContext.setAttribute(StateUtils.SERIAL_FACTORY, new DefaultSerialFactory());
+        servletContext.addInitParameter(StateManager.STATE_SAVING_METHOD_PARAM_NAME, StateManager.STATE_SAVING_METHOD_CLIENT);
         
         try
         {