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);
}
}