mman 01/10/16 04:44:42
Modified: src/org/apache/cocoon/components/language/markup/xsp
XSPRequestHelper.java
src/org/apache/cocoon/components/language/markup/xsp/java
request.xsl
webapp/docs/samples/xsp simple.xsp
Log:
various fixes plus support for form-encoding && container-encoding in
<xsp:request:get-parameter-values>
warning: it's been tested only with tomcat/opera,
expected behavior depends strongly on client sending the requests,
e.g., lynx/mozilla/exploder are all encoding national data differently...
Revision Changes Path
1.13 +104 -8
xml-cocoon2/src/org/apache/cocoon/components/language/markup/xsp/XSPRequestHelper.java
Index: XSPRequestHelper.java
===================================================================
RCS file:
/home/cvs/xml-cocoon2/src/org/apache/cocoon/components/language/markup/xsp/XSPRequestHelper.java,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -r1.12 -r1.13
--- XSPRequestHelper.java 2001/10/16 09:38:08 1.12
+++ XSPRequestHelper.java 2001/10/16 11:44:42 1.13
@@ -23,7 +23,7 @@
* The <code>Request</code> object helper
*
* @author <a href="mailto:[EMAIL PROTECTED]">Ricardo Rocha</a>
- * @version CVS $Revision: 1.12 $ $Date: 2001/10/16 09:38:08 $
+ * @version CVS $Revision: 1.13 $ $Date: 2001/10/16 11:44:42 $
*/
public class XSPRequestHelper {
/**
@@ -113,6 +113,16 @@
return getParameter(objectModel, name, defaultValue, null, null);
}
+ /**
+ * Return the given request parameter value or a user-provided default if
+ * none was specified.
+ *
+ * @param objectModel The Map objectModel
+ * @param name The parameter name
+ * @param defaultValue Value to substitute in absence of a parameter value
+ * @param form_encoding The supposed encoding of the request parameter.
+ * @param container_encoding The encoding used by container.
+ */
public static String getParameter(
Map objectModel,
String name,
@@ -120,16 +130,17 @@
String form_encoding,
String container_encoding
) {
- if(container_encoding == null) container_encoding = "ISO-8859-1"; //
default per JSP spec
+ if(container_encoding == null)
+ container_encoding = "ISO-8859-1"; // default per JSP spec
+
Request request = (Request)objectModel.get(Constants.REQUEST_OBJECT);
String value = request.getParameter(name);
if(form_encoding != null && value != null && value.length() > 0) {
try {
value = new String(value.getBytes(container_encoding),
form_encoding);
- }
- catch(java.io.UnsupportedEncodingException uee) {
+ } catch(java.io.UnsupportedEncodingException uee) {
throw new RuntimeException("Unsupported Encoding Exception: " +
- uee.getMessage());
+ uee.getMessage());
}
}
@@ -165,8 +176,44 @@
URI,
PREFIX,
contentHandler,
+ "parameter",
+ getParameter(objectModel, name, defaultValue, null, null),
+ attr
+ );
+ }
+
+ /**
+ * Output the given request parameter value or a user-provided default if
+ * none was specified.
+ *
+ * @param objectModel The Map objectModel
+ * @param contentHandler The SAX content handler
+ * @param name The parameter name
+ * @param defaultValue Value to substitute in absence of a parameter value
+ * @param form_encoding The supposed encoding of the request parameter.
+ * @param container_encoding The encoding used by container.
+ * @exception SAXException If a SAX error occurs
+ */
+ public static void getParameter(
+ Map objectModel,
+ ContentHandler contentHandler,
+ String name,
+ String defaultValue,
+ String form_encoding,
+ String container_encoding
+ )
+ throws SAXException
+ {
+ AttributesImpl attr = new AttributesImpl();
+ XSPObjectHelper.addAttribute(attr, "name", name);
+
+ XSPObjectHelper.elementData(
+ URI,
+ PREFIX,
+ contentHandler,
"parameter",
- getParameter(objectModel, name, defaultValue),
+ getParameter(objectModel, name, defaultValue,
+ form_encoding, container_encoding),
attr
);
}
@@ -188,14 +235,63 @@
Request request = (Request)objectModel.get(Constants.REQUEST_OBJECT);
AttributesImpl attr = new AttributesImpl();
XSPObjectHelper.addAttribute(attr, "name", name);
+
+ XSPObjectHelper.start(URI, PREFIX, contentHandler,
+ "parameter-values", attr);
+
+ String[] values = request.getParameterValues(name);
+
+ if (values != null) {
+ for (int i = 0; i < values.length; i++) {
+ XSPObjectHelper.elementData(URI, PREFIX, contentHandler,
+ "value", values[i]);
+ }
+ }
+
+ XSPObjectHelper.end(URI, PREFIX, contentHandler, "parameter-values");
+ }
+
+ /**
+ * Output the request parameter values for a given name
+ *
+ * @param objectModel The Map objectModel
+ * @param contentHandler The SAX content handler
+ * @param form_encoding The supposed encoding of the request parameter.
+ * @param container_encoding The encoding used by container.
+ * @exception SAXException If a SAX error occurs
+ */
+ public static void getParameterValues(
+ Map objectModel,
+ ContentHandler contentHandler,
+ String name,
+ String form_encoding,
+ String container_encoding
+ )
+ throws SAXException
+ {
+ Request request = (Request)objectModel.get(Constants.REQUEST_OBJECT);
+ AttributesImpl attr = new AttributesImpl();
+ XSPObjectHelper.addAttribute(attr, "name", name);
- XSPObjectHelper.start(URI, PREFIX, contentHandler, "parameter-values",
attr);
+ XSPObjectHelper.start(URI, PREFIX, contentHandler,
+ "parameter-values", attr);
String[] values = request.getParameterValues(name);
if (values != null) {
for (int i = 0; i < values.length; i++) {
- XSPObjectHelper.elementData(URI, PREFIX, contentHandler, "value",
values[i]);
+ if(form_encoding != null && values[i] != null &&
+ values[i].length() > 0) {
+ try {
+ values[i] = new String(values[i].getBytes(container_encoding),
+ form_encoding);
+ } catch(java.io.UnsupportedEncodingException uee) {
+ throw new RuntimeException("Unsupported Encoding Exception: " +
+ uee.getMessage());
+ }
+ }
+ XSPObjectHelper.elementData(URI, PREFIX, contentHandler,
+ "value", values[i]);
}
}
1.7 +43 -23
xml-cocoon2/src/org/apache/cocoon/components/language/markup/xsp/java/request.xsl
Index: request.xsl
===================================================================
RCS file:
/home/cvs/xml-cocoon2/src/org/apache/cocoon/components/language/markup/xsp/java/request.xsl,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- request.xsl 2001/10/16 09:38:08 1.6
+++ request.xsl 2001/10/16 11:44:42 1.7
@@ -11,7 +11,7 @@
<!--
* @author <a href="mailto:[EMAIL PROTECTED]>Ricardo Rocha</a>
- * @version CVS $Revision: 1.6 $ $Date: 2001/10/16 09:38:08 $
+ * @version CVS $Revision: 1.7 $ $Date: 2001/10/16 11:44:42 $
-->
<!-- XSP Request logicsheet for the Java language -->
@@ -127,30 +127,11 @@
</xsl:variable>
<xsl:variable name="form-encoding">
- <xsl:choose>
- <xsl:when test="@form-encoding">"<xsl:value-of
- select="@form-encoding"/>"</xsl:when>
- <xsl:when test="form-encoding">
- <xsl:call-template name="get-nested-content">
- <xsl:with-param name="content"
select="xsp-request:form-encoding"/>
- </xsl:call-template>
- </xsl:when>
- <xsl:otherwise>null</xsl:otherwise>
- </xsl:choose>
+ <xsl:call-template name="value-for-form-encoding"/>
</xsl:variable>
<xsl:variable name="container-encoding">
- <xsl:choose>
- <xsl:when test="@container-encoding">"<xsl:value-of
- select="@container-encoding"/>"</xsl:when>
- <xsl:when test="container-encoding">
- <xsl:call-template name="get-nested-content">
- <xsl:with-param name="content"
- select="xsp-request:container-encoding"/>
- </xsl:call-template>
- </xsl:when>
- <xsl:otherwise>null</xsl:otherwise>
- </xsl:choose>
+ <xsl:call-template name="value-for-container-encoding"/>
</xsl:variable>
<xsl:variable name="as">
@@ -175,12 +156,24 @@
</xsl:template>
<xsl:template match="xsp-request:get-parameter-values">
+
<xsl:variable name="name">
<xsl:call-template name="value-for-name"/>
</xsl:variable>
+ <xsl:variable name="form-encoding">
+ <xsl:call-template name="value-for-form-encoding"/>
+ </xsl:variable>
+
+ <xsl:variable name="container-encoding">
+ <xsl:call-template name="value-for-container-encoding"/>
+ </xsl:variable>
+
<xsp:logic>
- XSPRequestHelper.getParameterValues(objectModel,
this.contentHandler, <xsl:copy-of select="$name"/>);
+ XSPRequestHelper.getParameterValues(objectModel, this.contentHandler,
+ <xsl:copy-of select="$name"/>,
+ <xsl:copy-of select="$form-encoding"/>,
+ <xsl:copy-of select="$container-encoding"/>);
</xsp:logic>
</xsl:template>
@@ -474,6 +467,33 @@
<xsl:with-param name="content" select="xsp-request:name"/>
</xsl:call-template>
</xsl:when>
+ </xsl:choose>
+ </xsl:template>
+
+ <xsl:template name="value-for-form-encoding">
+ <xsl:choose>
+ <xsl:when test="@form-encoding">"<xsl:value-of
+ select="@form-encoding"/>"</xsl:when>
+ <xsl:when test="form-encoding">
+ <xsl:call-template name="get-nested-content">
+ <xsl:with-param name="content" select="xsp-request:form-encoding"/>
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:otherwise>null</xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+
+ <xsl:template name="value-for-container-encoding">
+ <xsl:choose>
+ <xsl:when test="@container-encoding">"<xsl:value-of
+ select="@container-encoding"/>"</xsl:when>
+ <xsl:when test="container-encoding">
+ <xsl:call-template name="get-nested-content">
+ <xsl:with-param name="content"
+ select="xsp-request:container-encoding"/>
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:otherwise>null</xsl:otherwise>
</xsl:choose>
</xsl:template>
1.5 +7 -0 xml-cocoon2/webapp/docs/samples/xsp/simple.xsp
Index: simple.xsp
===================================================================
RCS file: /home/cvs/xml-cocoon2/webapp/docs/samples/xsp/simple.xsp,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- simple.xsp 2001/08/30 13:05:58 1.4
+++ simple.xsp 2001/10/16 11:44:42 1.5
@@ -60,6 +60,13 @@
<xsp-request:get-parameter name="name" default="Not provided"/>
</para>
+ <para>
+ Request parameter "name" as iso-8859-2 encoded String (with servlet
+ container encoding iso-8859-1):
+ <xsp-request:get-parameter name="name" default="Not provided"
+ form-encoding="iso-8859-2" container-encoding="iso-8859-1"/>
+ </para>
+
<xsp-request:get-parameter-values name="name"/>
<xsp-request:get-parameter-names/>
----------------------------------------------------------------------
In case of troubles, e-mail: [EMAIL PROTECTED]
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]