dgraham 2003/06/19 21:09:57
Modified: src/share/org/apache/struts/taglib/html RewriteTag.java
src/share/org/apache/struts/util RequestUtils.java
Log:
Added new RequestUtils.computeURL() method with yet another parameter
"encodeSeparator".
If redirect is true, the ampersand is always written as & regardless of
the value of encodeSeparator. If redirect is false and encodeSeparator is
true we use & as a separator.
RewriteTag only encodes the ampersand in xhtml mode.
PR# 20835.
Revision Changes Path
1.10 +6 -5
jakarta-struts/src/share/org/apache/struts/taglib/html/RewriteTag.java
Index: RewriteTag.java
===================================================================
RCS file:
/home/cvs/jakarta-struts/src/share/org/apache/struts/taglib/html/RewriteTag.java,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- RewriteTag.java 6 May 2003 23:44:45 -0000 1.9
+++ RewriteTag.java 20 Jun 2003 04:09:57 -0000 1.10
@@ -105,7 +105,8 @@
null,
params,
anchor,
- !this.isXhtml());
+ false,
+ this.isXhtml());
} catch (MalformedURLException e) {
RequestUtils.saveException(pageContext, e);
1.104 +67 -6
jakarta-struts/src/share/org/apache/struts/util/RequestUtils.java
Index: RequestUtils.java
===================================================================
RCS file:
/home/cvs/jakarta-struts/src/share/org/apache/struts/util/RequestUtils.java,v
retrieving revision 1.103
retrieving revision 1.104
diff -u -r1.103 -r1.104
--- RequestUtils.java 14 Jun 2003 18:36:19 -0000 1.103
+++ RequestUtils.java 20 Jun 2003 04:09:57 -0000 1.104
@@ -396,7 +396,7 @@
return computeURL(pageContext, forward, href, page, null, params,
anchor, redirect);
}
-
+
/**
* Compute a hyperlink URL based on the <code>forward</code>,
* <code>href</code>, <code>action</code> or <code>page</code> parameter
@@ -432,6 +432,60 @@
String anchor,
boolean redirect)
throws MalformedURLException {
+
+ return computeURL(
+ pageContext,
+ forward,
+ href,
+ page,
+ action,
+ params,
+ anchor,
+ redirect,
+ true);
+ }
+
+ /**
+ * Compute a hyperlink URL based on the <code>forward</code>,
+ * <code>href</code>, <code>action</code> or <code>page</code> parameter
+ * that is not null.
+ * The returned URL will have already been passed to
+ * <code>response.encodeURL()</code> for adding a session identifier.
+ *
+ * @param pageContext PageContext for the tag making this call
+ *
+ * @param forward Logical forward name for which to look up
+ * the context-relative URI (if specified)
+ * @param href URL to be utilized unmodified (if specified)
+ * @param page Module-relative page for which a URL should
+ * be created (if specified)
+ * @param action Logical action name for which to look up
+ * the context-relative URI (if specified)
+ *
+ * @param params Map of parameters to be dynamically included (if any)
+ * @param anchor Anchor to be dynamically included (if any)
+ *
+ * @param redirect Is this URL for a <code>response.sendRedirect()</code>?
+ * @param encodeSeparator This is only checked if redirect is set to false
(never
+ * encoded for a redirect). If true, query string parameter separators are
encoded
+ * as >amp;, else & is used.
+ * @return URL with session identifier
+ * @exception MalformedURLException if a URL cannot be created
+ * for the specified parameters
+ */
+ public static String computeURL(
+ PageContext pageContext,
+ String forward,
+ String href,
+ String page,
+ String action,
+ Map params,
+ String anchor,
+ boolean redirect,
+ boolean encodeSeparator)
+ throws MalformedURLException {
+
+ // TODO All the computeURL() methods need refactoring!
// Validate that exactly one specifier was included
int n = 0;
@@ -513,7 +567,14 @@
}
// Define the parameter separator
- String separator = redirect ? "&" : "&";
+ String separator = null;
+ if (redirect) {
+ separator = "&";
+ } else if (encodeSeparator) {
+ separator = "&";
+ } else {
+ separator = "&";
+ }
// Add the required request parameters
boolean question = temp.indexOf('?') >= 0;
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]