You are viewing a plain text version of this content. The canonical link for it is here.
Posted to taglibs-dev@jakarta.apache.org by pi...@apache.org on 2003/02/26 23:47:07 UTC

cvs commit: jakarta-taglibs/standard/src/org/apache/taglibs/standard/tag/common/core ParamSupport.java

pierred     2003/02/26 14:47:07

  Modified:    standard/src/org/apache/taglibs/standard/tag/common/core
                        ParamSupport.java
  Log:
  Fix for bug 16912.
  We take advantage of URLEncoder.encode(String,String) if running on J2SE 1.4.
  
  Revision  Changes    Path
  1.8       +47 -3     jakarta-taglibs/standard/src/org/apache/taglibs/standard/tag/common/core/ParamSupport.java
  
  Index: ParamSupport.java
  ===================================================================
  RCS file: /home/cvs/jakarta-taglibs/standard/src/org/apache/taglibs/standard/tag/common/core/ParamSupport.java,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- ParamSupport.java	8 Apr 2002 20:46:40 -0000	1.7
  +++ ParamSupport.java	26 Feb 2003 22:47:07 -0000	1.8
  @@ -55,6 +55,7 @@
   
   package org.apache.taglibs.standard.tag.common.core;
   
  +import java.lang.reflect.*;
   import java.util.*;
   import javax.servlet.jsp.*;
   import javax.servlet.jsp.tagext.*;
  @@ -72,6 +73,12 @@
   public abstract class ParamSupport extends BodyTagSupport {
   
       //*********************************************************************
  +    // Private constants
  +
  +    private static final Class[] URL_ENCODER_PARAM_TYPES =
  +	new Class[] { String.class, String.class };
  +
  +    //*********************************************************************
       // Protected state
   
       protected String name;                       // 'name' attribute
  @@ -85,8 +92,26 @@
       protected boolean encode = true;
   
       //*********************************************************************
  +    // Private state
  +
  +    private static Method encodeMethod1_4 = null;
  +
  +    //*********************************************************************
       // Constructor and initialization
   
  +    // URLEncoder.encode(String) has been deprecated in J2SE 1.4. 
  +    // Take advantage of the new method URLEncoder.encode(String, enc)
  +    // if J2SE 1.4 is used.
  +    static {
  +	try {
  +	    Class urlEncoderClass = Class.forName("java.net.URLEncoder");
  +	    encodeMethod1_4 = 
  +                urlEncoderClass.getMethod(
  +                    "encode",
  +		    new Class[] {String.class, String.class});
  +        } catch (Exception ex) {} // encodeMethod1_4 will be null if exception
  +    }
  +
       public ParamSupport() {
   	super();
   	init();
  @@ -121,10 +146,29 @@
   		value = bodyContent.getString().trim();
   	}
   	if (encode) {
  -	    parent.addParameter(
  -		URLEncoder.encode(name), URLEncoder.encode(value));
  -	} else
  +            if (encodeMethod1_4 != null) {
  +	        Object[] methodArgsName = new Object[2];
  +	        methodArgsName[0] = name;
  +	        methodArgsName[1] = pageContext.getResponse().getCharacterEncoding();
  +	        Object[] methodArgsValue = new Object[2];
  +	        methodArgsValue[0] = value;
  +	        methodArgsValue[1] = pageContext.getResponse().getCharacterEncoding();
  +	        
  +                try {
  +                    parent.addParameter(
  +                    (String)encodeMethod1_4.invoke(null, methodArgsName),
  +                    (String)encodeMethod1_4.invoke(null, methodArgsValue));  
  +                } catch (Exception ex) {
  +                    throw new JspException("System error invoking URLEncoder.encode() by reflection.", ex);
  +                }
  +            } else {
  +                // must use J2SE 1.3 version
  +	        parent.addParameter(
  +		    URLEncoder.encode(name), URLEncoder.encode(value));
  +            }
  +	} else {
   	    parent.addParameter(name, value);
  +        }
   	return EVAL_PAGE;
       }
   
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: taglibs-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: taglibs-dev-help@jakarta.apache.org