[jboss-cvs] jboss-seam/src/main/org/jboss/seam/core ...
Gavin King
gavin.king at jboss.com
Thu Feb 22 13:08:54 EST 2007
User: gavin
Date: 07/02/22 13:08:54
Modified: src/main/org/jboss/seam/core Manager.java Pages.java
Log:
better handling of parameters
fixed silly breakage of scheme redirect
Revision Changes Path
1.150 +45 -31 jboss-seam/src/main/org/jboss/seam/core/Manager.java
(In the diff below, changes in quantity of whitespace are not shown.)
Index: Manager.java
===================================================================
RCS file: /cvsroot/jboss/jboss-seam/src/main/org/jboss/seam/core/Manager.java,v
retrieving revision 1.149
retrieving revision 1.150
diff -u -b -r1.149 -r1.150
--- Manager.java 22 Feb 2007 16:05:39 -0000 1.149
+++ Manager.java 22 Feb 2007 18:08:54 -0000 1.150
@@ -42,7 +42,7 @@
*
* @author Gavin King
* @author <a href="mailto:theute at jboss.org">Thomas Heute</a>
- * @version $Revision: 1.149 $
+ * @version $Revision: 1.150 $
*/
@Scope(ScopeType.EVENT)
@Name("org.jboss.seam.core.manager")
@@ -806,7 +806,7 @@
public String encodeConversationId(String url)
{
//DONT BREAK, icefaces uses this
- if ( Seam.isSessionInvalid() )
+ if ( Seam.isSessionInvalid() || containsParameter(url, conversationIdParameter) )
{
return url;
}
@@ -855,17 +855,6 @@
}
}
- /**
- * Redirect to the given view id, encoding the conversation id
- * into the request URL.
- *
- * @param viewId the JSF view id
- */
- public void redirect(String viewId)
- {
- redirect(viewId, null, true);
- }
-
public void interpolateAndRedirect(String url)
{
Map<String, Object> parameters = new HashMap<String, Object>();
@@ -894,8 +883,10 @@
StringBuilder builder = new StringBuilder(url);
for ( Map.Entry<String, Object> param: parameters.entrySet() )
{
- Object parameterValue = param.getValue();
String parameterName = param.getKey();
+ if ( !containsParameter(url, parameterName) )
+ {
+ Object parameterValue = param.getValue();
if (parameterValue instanceof Iterable)
{
for ( Object value: (Iterable) parameterValue )
@@ -920,6 +911,7 @@
}
}
}
+ }
if ( url.indexOf('?')<0 )
{
builder.setCharAt( url.length() ,'?' );
@@ -927,6 +919,12 @@
return builder.toString();
}
+ private boolean containsParameter(String url, String parameterName)
+ {
+ return url.indexOf('?' + parameterName + '=')>0 ||
+ url.indexOf( '&' + parameterName + '=')>0;
+ }
+
private String encode(Object value)
{
try
@@ -940,6 +938,17 @@
}
/**
+ * Redirect to the given view id, encoding the conversation id
+ * into the request URL.
+ *
+ * @param viewId the JSF view id
+ */
+ public void redirect(String viewId)
+ {
+ redirect(viewId, null, true);
+ }
+
+ /**
* Redirect to the given view id, after encoding parameters and conversation id
* into the request URL.
*
@@ -960,6 +969,12 @@
{
url = encodeParameters(url, parameters);
}
+ url = Pages.instance().encodePageParameters(
+ FacesContext.getCurrentInstance(),
+ url,
+ viewId,
+ parameters==null ? null : parameters.keySet()
+ );
if (includeConversationId)
{
url = encodeConversationId(url);
@@ -996,8 +1011,7 @@
*/
public String appendConversationIdFromRedirectFilter(String url)
{
- boolean appendConversationId = !controllingRedirect &&
- !url.contains("?" + getConversationIdParameter() +"=");
+ boolean appendConversationId = !controllingRedirect;
if (appendConversationId)
{
1.99 +22 -5 jboss-seam/src/main/org/jboss/seam/core/Pages.java
(In the diff below, changes in quantity of whitespace are not shown.)
Index: Pages.java
===================================================================
RCS file: /cvsroot/jboss/jboss-seam/src/main/org/jboss/seam/core/Pages.java,v
retrieving revision 1.98
retrieving revision 1.99
diff -u -b -r1.98 -r1.99
--- Pages.java 22 Feb 2007 16:54:10 -0000 1.98
+++ Pages.java 22 Feb 2007 18:08:54 -0000 1.99
@@ -240,11 +240,15 @@
String viewId = facesContext.getViewRoot().getViewId();
String requestScheme = getRequestScheme(facesContext);
- if ( requestScheme!=null && !requestScheme.equals( getScheme(viewId) ) )
+ if ( requestScheme!=null )
{
- Manager.instance().redirect( viewId, getConvertedParameters(facesContext, viewId), true );
+ String scheme = getScheme(viewId);
+ if ( scheme!=null && !requestScheme.equals(scheme) )
+ {
+ Manager.instance().redirect(viewId);
return result;
}
+ }
for ( Page page: getPageStack(viewId) )
{
@@ -520,7 +524,7 @@
* against the model and converting to String.
*
* @param viewId the JSF view id
- * @param overridden override certain parameter values
+ * @param overridden excluded parameters
* @return a map of page parameter name to String value
*/
public Map<String, Object> getConvertedParameters(FacesContext facesContext, String viewId, Set<String> overridden)
@@ -653,7 +657,20 @@
*/
public String encodePageParameters(FacesContext facesContext, String url, String viewId)
{
- Map<String, Object> parameters = getConvertedParameters(facesContext, viewId);
+ return encodePageParameters(facesContext, url, viewId, Collections.EMPTY_SET);
+ }
+
+ /**
+ * Encode page parameters into a URL
+ *
+ * @param url the base URL
+ * @param viewId the JSF view id of the page
+ * @param overridden excluded parameters
+ * @return the URL with parameters appended
+ */
+ public String encodePageParameters(FacesContext facesContext, String url, String viewId, Set<String> overridden)
+ {
+ Map<String, Object> parameters = getConvertedParameters(facesContext, viewId, overridden);
return Manager.instance().encodeParameters(url, parameters);
}
More information about the jboss-cvs-commits
mailing list