Martin,

I think this effects the FacesIO.js file, since it isn't using the
"javax.faces.ViewState", but only our old param.

-M

On 10/17/06, [EMAIL PROTECTED] <[EMAIL PROTECTED]> wrote:
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);
         }
     }






--
Matthias Wessendorf
http://tinyurl.com/fmywh

further stuff:
blog: http://jroller.com/page/mwessendorf
mail: mwessendorf-at-gmail-dot-com

Reply via email to