ate 2005/04/21 02:00:40 Modified: portal/src/java/org/apache/jetspeed/container/state/impl JetspeedNavigationalStateCodec.java Log: Fixing http://issues.apache.org/jira/browse/JS2-194 and http://issues.apache.org/jira/browse/JS2-231. Render parameters are now properly cleared conforming to the Portlet API requirements. Also fixed: when using SessionFullNavigationalState (the default), encoded stated of the targeted PortletWindow ended up being postfixed in the encoded state of the last non-targeted PortletWindow. Revision Changes Path 1.4 +34 -8 jakarta-jetspeed-2/portal/src/java/org/apache/jetspeed/container/state/impl/JetspeedNavigationalStateCodec.java Index: JetspeedNavigationalStateCodec.java =================================================================== RCS file: /home/cvs/jakarta-jetspeed-2/portal/src/java/org/apache/jetspeed/container/state/impl/JetspeedNavigationalStateCodec.java,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- JetspeedNavigationalStateCodec.java 19 Oct 2004 20:20:36 -0000 1.3 +++ JetspeedNavigationalStateCodec.java 21 Apr 2005 09:00:40 -0000 1.4 @@ -212,7 +212,7 @@ targetState.setWindowState(windowState != null ? windowState : currentState != null ? currentState.getWindowState() : null); // never retain actionRequest parameters nor session stored renderParameters - if ( currentState != null && states.getActionWindow() != window && !renderParamsStateFull) + if ( currentState != null && !renderParamsStateFull ) { // retain current request parameters if any if ( currentState.getParametersMap() != null ) @@ -265,6 +265,8 @@ throws UnsupportedEncodingException { StringBuffer buffer = new StringBuffer(); + String encodedState; + boolean haveState = false; // skip other states if all non-targeted PortletWindow states are kept in the session if ( !navParamsStateFull || !renderParamsStateFull ) @@ -282,16 +284,39 @@ } else { - buffer.append(encodePortletWindowNavigationalState(windowId, pwfns, false, navParamsStateFull, - renderParamsStateFull)); + encodedState = encodePortletWindowNavigationalState(windowId, pwfns, false, navParamsStateFull, + renderParamsStateFull); + if ( encodedState.length() > 0 ) + { + if ( !haveState ) + { + haveState = true; + } + else + { + buffer.append(PARAMETER_SEPARATOR); + } + buffer.append(encodedState); + } } } } - buffer.append(encodePortletWindowNavigationalState(targetWindowId, targetState, action, - false, false)); + encodedState = encodePortletWindowNavigationalState(targetWindowId, targetState, action, false, false); + if ( encodedState.length() > 0 ) + { + if ( !haveState ) + { + haveState = true; + } + else + { + buffer.append(PARAMETER_SEPARATOR); + } + buffer.append(encodedState); + } String encodedNavState = null; - if ( buffer.length() > 0 ) + if ( haveState ) { encodedNavState = encodeParameters(buffer.toString(), states.getCharacterEncoding()); } @@ -356,7 +381,7 @@ buffer.append(encodeArgument(paramBuffer.toString(),PARAMETER_SEPARATOR)); } } - else if ( renderParamsStateFull && state.isClearParameters() ) + else if ( state.isClearParameters() ) { // Special case: for a targeted PortletWindow for which no parameters are specified // indicate its saved (in the session) request parameters must be cleared instead of copying them when @@ -364,6 +389,7 @@ // During decoding this CLEAR_PARAMS_KEY will set the clearParameters flag of the PortletWindowRequestNavigationalState. buffer.append(PARAMETER_SEPARATOR); buffer.append(CLEAR_PARAMS_KEY); + encoded = true; } return encoded ? buffer.toString() : ""; }
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]