You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by mm...@apache.org on 2006/10/17 15:49:24 UTC

svn commit: r464925 - in /myfaces: core/trunk/impl/src/main/java/org/apache/myfaces/renderkit/html/HtmlResponseStateManager.java shared/trunk/core/src/main/java/org/apache/myfaces/shared/util/StateUtils.java

Author: mmarinschek
Date: Tue Oct 17 06:49:23 2006
New Revision: 464925

URL: http://svn.apache.org/viewvc?view=rev&rev=464925
Log:
fix for MyFaces-1469: State-saving now uses the parameter javax.faces.ViewState - as proposed by the 1.2 spec

Modified:
    myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/renderkit/html/HtmlResponseStateManager.java
    myfaces/shared/trunk/core/src/main/java/org/apache/myfaces/shared/util/StateUtils.java

Modified: myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/renderkit/html/HtmlResponseStateManager.java
URL: http://svn.apache.org/viewvc/myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/renderkit/html/HtmlResponseStateManager.java?view=diff&rev=464925&r1=464924&r2=464925
==============================================================================
--- myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/renderkit/html/HtmlResponseStateManager.java (original)
+++ myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/renderkit/html/HtmlResponseStateManager.java Tue Oct 17 06:49:23 2006
@@ -36,66 +36,32 @@
     extends MyfacesResponseStateManager {
     private static final Log log = LogFactory.getLog(HtmlResponseStateManager.class);
 
-    private static final String TREE_PARAM = "jsf_tree";
-    private static final String STATE_PARAM = "jsf_state";
-    private static final String VIEWID_PARAM = "jsf_viewid";
-    private static final String BASE64_TREE_PARAM = "jsf_tree_64";
-    private static final String BASE64_STATE_PARAM = "jsf_state_64";
-    public static final String STANDARD_STATE_SAVING_PARAM = "javax.faces.ViewState";    
+    private static final int TREE_PARAM = 0;
+    private static final int STATE_PARAM = 1;
+    private static final int VIEWID_PARAM = 2;
+
+    public static final String STANDARD_STATE_SAVING_PARAM = "javax.faces.ViewState";
 
     public void writeState(FacesContext facescontext,
                            StateManager.SerializedView serializedview) throws IOException {
         ResponseWriter responseWriter = facescontext.getResponseWriter();
 
+        Object[] savedState = new Object[3];
+
         if (facescontext.getApplication().getStateManager().isSavingStateInClient(facescontext)) {
             Object treeStruct = serializedview.getStructure();
             Object compStates = serializedview.getState();
 
-            if (treeStruct != null) {
-                if (treeStruct instanceof String) {
-                    responseWriter.startElement(HTML.INPUT_ELEM, null);
-                    responseWriter.writeAttribute(HTML.TYPE_ATTR, HTML.INPUT_TYPE_HIDDEN, null);
-                    responseWriter.writeAttribute(HTML.NAME_ATTR, TREE_PARAM, null);
-                    responseWriter.writeAttribute(HTML.ID_ATTR, TREE_PARAM, null);
-                    if (StateUtils.isSecure(facescontext.getExternalContext()))
-                        treeStruct = StateUtils.construct(treeStruct, facescontext.getExternalContext());
-                    responseWriter.writeAttribute(HTML.VALUE_ATTR, treeStruct, null);
-                    responseWriter.endElement(HTML.INPUT_ELEM);
-                }
-                else {
-                    responseWriter.startElement(HTML.INPUT_ELEM, null);
-                    responseWriter.writeAttribute(HTML.TYPE_ATTR, HTML.INPUT_TYPE_HIDDEN, null);
-                    responseWriter.writeAttribute(HTML.NAME_ATTR, BASE64_TREE_PARAM, null);
-                    responseWriter.writeAttribute(HTML.ID_ATTR, BASE64_TREE_PARAM, null);
-                    responseWriter.writeAttribute(HTML.VALUE_ATTR,
-                                                  StateUtils.construct(treeStruct, facescontext.getExternalContext()), null);
-                    responseWriter.endElement(HTML.INPUT_ELEM);
-                }
+            if(treeStruct != null)
+            {
+                savedState[TREE_PARAM]=treeStruct;
             }
             else {
                 log.error("No tree structure to be saved in client response!");
             }
 
             if (compStates != null) {
-                if (compStates instanceof String) {
-                    responseWriter.startElement(HTML.INPUT_ELEM, null);
-                    responseWriter.writeAttribute(HTML.TYPE_ATTR, HTML.INPUT_TYPE_HIDDEN, null);
-                    responseWriter.writeAttribute(HTML.NAME_ATTR, STATE_PARAM, null);
-                    responseWriter.writeAttribute(HTML.ID_ATTR, STATE_PARAM, null);
-                    if (StateUtils.isSecure(facescontext.getExternalContext()))
-                        compStates = StateUtils.construct(compStates, facescontext.getExternalContext());
-                    responseWriter.writeAttribute(HTML.VALUE_ATTR, compStates, null);
-                    responseWriter.endElement(HTML.INPUT_ELEM);
-                }
-                else {
-                    responseWriter.startElement(HTML.INPUT_ELEM, null);
-                    responseWriter.writeAttribute(HTML.TYPE_ATTR, HTML.INPUT_TYPE_HIDDEN, null);
-                    responseWriter.writeAttribute(HTML.NAME_ATTR, BASE64_STATE_PARAM, null);
-                    responseWriter.writeAttribute(HTML.ID_ATTR, BASE64_STATE_PARAM, null);
-                    responseWriter.writeAttribute(HTML.VALUE_ATTR,
-                                                  StateUtils.construct(compStates, facescontext.getExternalContext()), null);
-                    responseWriter.endElement(HTML.INPUT_ELEM);
-                }
+                savedState[STATE_PARAM] = compStates;
             }
             else {
                 log.error("No component states to be saved in client response!");
@@ -106,21 +72,19 @@
             Object treeStruct = serializedview.getStructure();
             if (treeStruct != null) {
                 if (treeStruct instanceof String) {
-                    responseWriter.startElement(HTML.INPUT_ELEM, null);
-                    responseWriter.writeAttribute(HTML.TYPE_ATTR, HTML.INPUT_TYPE_HIDDEN, null);
-                    responseWriter.writeAttribute(HTML.NAME_ATTR, TREE_PARAM, null);
-                    responseWriter.writeAttribute(HTML.ID_ATTR, TREE_PARAM, null);
-                    responseWriter.writeAttribute(HTML.VALUE_ATTR, treeStruct, null);
-                    responseWriter.endElement(HTML.INPUT_ELEM);
+                    savedState[TREE_PARAM] = treeStruct;
                 }
             }
         }
 
+        savedState[VIEWID_PARAM] = facescontext.getViewRoot().getViewId();
+
         responseWriter.startElement(HTML.INPUT_ELEM, null);
         responseWriter.writeAttribute(HTML.TYPE_ATTR, HTML.INPUT_TYPE_HIDDEN, null);
-        responseWriter.writeAttribute(HTML.NAME_ATTR, VIEWID_PARAM, null);
-        responseWriter.writeAttribute(HTML.ID_ATTR, VIEWID_PARAM, null);
-        responseWriter.writeAttribute(HTML.VALUE_ATTR, facescontext.getViewRoot().getViewId(), null);
+        responseWriter.writeAttribute(HTML.NAME_ATTR, STANDARD_STATE_SAVING_PARAM, null);
+        responseWriter.writeAttribute(HTML.ID_ATTR, STANDARD_STATE_SAVING_PARAM, null);
+        responseWriter.writeAttribute(HTML.VALUE_ATTR, StateUtils.construct(savedState,
+                facescontext.getExternalContext()), null);
         responseWriter.endElement(HTML.INPUT_ELEM);
     }
 
@@ -133,7 +97,9 @@
      */
     public void writeStateAsUrlParams(FacesContext facescontext,
                                       StateManager.SerializedView serializedview) throws IOException {
-        ResponseWriter responseWriter = facescontext.getResponseWriter();
+
+        throw new UnsupportedOperationException("long been deprecated...");
+/*        ResponseWriter responseWriter = facescontext.getResponseWriter();
         Object treeStruct = serializedview.getStructure();
         Object compStates = serializedview.getState();
 
@@ -173,56 +139,57 @@
             responseWriter.write('&');
         }
         writeStateParam(responseWriter, VIEWID_PARAM, facescontext.getViewRoot().getViewId());
+
+
+        private void writeStateParam(ResponseWriter writer, String name, String value)
+            throws IOException {
+            writer.write(name);
+            writer.write('=');
+            writer.write(URLEncoder.encode(value, writer.getCharacterEncoding()));
+        }
+
+        */
     }
 
-    public Object getTreeStructureToRestore(FacesContext facescontext, String viewId) {
-        Map reqParamMap = facescontext.getExternalContext().getRequestParameterMap();
-        Object param = reqParamMap.get(VIEWID_PARAM);
-        if (param == null || !param.equals(viewId)) {
+    public Object getTreeStructureToRestore(FacesContext facesContext, String viewId) {
+        Map reqParamMap = facesContext.getExternalContext().getRequestParameterMap();
+
+        Object encodedState = reqParamMap.get(STANDARD_STATE_SAVING_PARAM);
+
+        if(encodedState==null)
+            return null;        
+
+        Object[] savedState = (Object[]) StateUtils.reconstruct((String) encodedState, facesContext.getExternalContext());
+
+        String restoredViewId = (String) savedState[VIEWID_PARAM];
+
+        if (restoredViewId == null || !restoredViewId.equals(viewId)) {
             //no saved state or state of different viewId
             return null;
         }
 
-        param = reqParamMap.get(TREE_PARAM);
-        if (param != null) {
-            boolean saveStateInClient = facescontext.getApplication().getStateManager().isSavingStateInClient(facescontext);
-            if (saveStateInClient && StateUtils.isSecure(facescontext.getExternalContext())) // MYFACES-1427
-                param = StateUtils.construct(param, facescontext.getExternalContext());
-            return param;
-        }
+        return savedState[TREE_PARAM];
+    }
 
-        param = reqParamMap.get(BASE64_TREE_PARAM);
-        if (param != null) {
-            return StateUtils.reconstruct((String) param, facescontext.getExternalContext());
-        }
+    public Object getComponentStateToRestore(FacesContext facesContext) {
+        Map reqParamMap = facesContext.getExternalContext().getRequestParameterMap();
 
-        return null;
-    }
+        Object encodedState = reqParamMap.get(STANDARD_STATE_SAVING_PARAM);
 
-    public Object getComponentStateToRestore(FacesContext facescontext) {
-        Map reqParamMap = facescontext.getExternalContext().getRequestParameterMap();
-        Object param = reqParamMap.get(STATE_PARAM);
-        if (param != null) {
-            if (StateUtils.isSecure(facescontext.getExternalContext()))
-                param = StateUtils.construct(param, facescontext.getExternalContext());
-            return param;
-        }
+        if(encodedState==null)
+            return null;
 
-        param = reqParamMap.get(BASE64_STATE_PARAM);
-        if (param != null) {
-            return StateUtils.reconstruct((String) param, facescontext.getExternalContext());
-        }
+        Object[] savedState = (Object[]) StateUtils.reconstruct((String) encodedState, facesContext.getExternalContext());
 
-        return null;
-    }
+        String restoredViewId = (String) savedState[VIEWID_PARAM];
 
-    private void writeStateParam(ResponseWriter writer, String name, String value)
-        throws IOException {
-        writer.write(name);
-        writer.write('=');
-        writer.write(URLEncoder.encode(value, writer.getCharacterEncoding()));
-    }
+        if (restoredViewId == null || !restoredViewId.equals(facesContext)) {
+            //no saved state or state of different viewId
+            return null;
+        }
 
+        return savedState[STATE_PARAM];
+    }
 
 }
 

Modified: myfaces/shared/trunk/core/src/main/java/org/apache/myfaces/shared/util/StateUtils.java
URL: http://svn.apache.org/viewvc/myfaces/shared/trunk/core/src/main/java/org/apache/myfaces/shared/util/StateUtils.java?view=diff&rev=464925&r1=464924&r2=464925
==============================================================================
--- myfaces/shared/trunk/core/src/main/java/org/apache/myfaces/shared/util/StateUtils.java (original)
+++ myfaces/shared/trunk/core/src/main/java/org/apache/myfaces/shared/util/StateUtils.java Tue Oct 17 06:49:23 2006
@@ -233,6 +233,9 @@
     	byte[] bytes;
         try
         {
+            if(log.isDebugEnabled())
+                log.debug("Processing state : "+string);            
+
             bytes = string.getBytes(ZIP_CHARSET);
             bytes = decode(bytes);
             if(isSecure(ctx))
@@ -241,9 +244,9 @@
                 bytes = decompress(bytes);
             return getAsObject(bytes, ctx);
         }
-        catch (UnsupportedEncodingException e)
+        catch (Throwable th)
         {
-            throw new FacesException(e);
+            throw new FacesException("error while processing state : " + string, th);
         }
     }