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]

Reply via email to