luehe       2002/12/11 11:40:46

  Modified:    jasper2/src/share/org/apache/jasper/runtime
                        JspRuntimeLibrary.java
               jasper2/src/share/org/apache/jasper/compiler Generator.java
  Log:
  Added support for named attributes that do not evaluate to String
  
  Revision  Changes    Path
  1.10      +12 -4     
jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/runtime/JspRuntimeLibrary.java
  
  Index: JspRuntimeLibrary.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/runtime/JspRuntimeLibrary.java,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- JspRuntimeLibrary.java    27 Nov 2002 02:54:46 -0000      1.9
  +++ JspRuntimeLibrary.java    11 Dec 2002 19:40:45 -0000      1.10
  @@ -128,7 +128,15 @@
               return null;
           }
       }
  - 
  +
  +    public static Character getCharacter(String s) throws JasperException {
  +     if (s.length() > 0) {
  +         return new Character(s.charAt(0));
  +     } else {
  +         throw new 
JasperException(Constants.getString("jsp.error.bad_string_Character"));
  +     }
  +    }
  +
      // __begin convertMethod
       public static Object convert(String propertyName, String s, Class t, Class 
propertyEditorClass) 
          throws JasperException 
  
  
  
  1.139     +54 -21    
jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/Generator.java
  
  Index: Generator.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/Generator.java,v
  retrieving revision 1.138
  retrieving revision 1.139
  diff -u -r1.138 -r1.139
  --- Generator.java    5 Dec 2002 23:56:39 -0000       1.138
  +++ Generator.java    11 Dec 2002 19:40:45 -0000      1.139
  @@ -2419,7 +2419,7 @@
                    attrValue = convertString(
                                   c[0], attrValue, attrName,
                                handlerInfo.getPropertyEditorClass(attrName),
  -                             false);
  +                             true);
                }
            } else if (attr.isELInterpreterInput()) {
                   // run attrValue through the expression interpreter
  @@ -2429,7 +2429,7 @@
                attrValue = convertString(
                                   c[0], attrValue, attrName,
                                handlerInfo.getPropertyEditorClass(attrName),
  -                             true);
  +                             false);
            }
            return attrValue;
        }
  @@ -2519,11 +2519,12 @@
        }
   
        private String convertString(Class c, String s, String attrName,
  -                                  Class propEditorClass, boolean quote)
  +                                  Class propEditorClass,
  +                                  boolean isNamedAttribute)
                    throws JasperException {
   
            String quoted = s;
  -         if (quote) {
  +         if (!isNamedAttribute) {
                quoted = quote(s);
            }
   
  @@ -2538,11 +2539,19 @@
            } else if (c == boolean.class) {
                return Boolean.valueOf(s).toString();
            } else if (c == Boolean.class) {
  -             return "new Boolean(" + Boolean.valueOf(s).toString() + ")";
  +             if (isNamedAttribute)
  +                 return "new Boolean(" + s + ")";
  +             else
  +                 // Detect format error at translation time
  +                 return "new Boolean(" + Boolean.valueOf(s).toString() + ")";
            } else if (c == byte.class) {
                return "((byte)" + Byte.valueOf(s).toString() + ")";
            } else if (c == Byte.class) {
  -             return "new Byte((byte)" + Byte.valueOf(s).toString() + ")";
  +             if (isNamedAttribute)
  +                 return "new Byte(" + s + ")";
  +             else
  +                 // Detect format error at translation time
  +                 return "new Byte((byte)" + Byte.valueOf(s).toString() + ")";
            } else if (c == char.class) {
                // non-normative (normative method would fail to compile)
                if (s.length() > 0) {
  @@ -2554,35 +2563,59 @@
                           err.getString("jsp.error.bad_string_char"));
                }
            } else if (c == Character.class) {
  -             // non-normative (normative method would fail to compile)
  -             if (s.length() > 0) {
  -                 char ch = s.charAt(0);
  -                 // this trick avoids escaping issues
  -                 return "new Character((char) " + (int) ch + ")";
  +             if (isNamedAttribute) {
  +                 return "org.apache.jasper.runtime.JspRuntimeLibrary.getCharacter(" 
+ s + ")";
                } else {
  -                 throw new NumberFormatException(
  -                        err.getString("jsp.error.bad_string_Character"));
  +                 // non-normative (normative method would fail to compile)
  +                 if (s.length() > 0) {
  +                     char ch = s.charAt(0);
  +                     // this trick avoids escaping issues
  +                     return "new Character((char) " + (int) ch + ")";
  +                 } else {
  +                     throw new NumberFormatException(
  +                         err.getString("jsp.error.bad_string_Character"));
  +                 }
                }
            } else if (c == double.class) {
                return Double.valueOf(s).toString();
            } else if (c == Double.class) {
  -             return "new Double(" + Double.valueOf(s).toString() + ")";
  +             if (isNamedAttribute)
  +                 return "new Double(" + s + ")";
  +             else
  +                 // Detect format error at translation time
  +                 return "new Double(" + Double.valueOf(s).toString() + ")";
            } else if (c == float.class) {
                return Float.valueOf(s).toString() + "f";
            } else if (c == Float.class) {
  -             return "new Float(" + Float.valueOf(s).toString() + "f)";
  +             if (isNamedAttribute)
  +                 return "new Float(" + s + ")";
  +             else
  +                 // Detect format error at translation time
  +                 return "new Float(" + Float.valueOf(s).toString() + "f)";
            } else if (c == int.class) {
                return Integer.valueOf(s).toString();
            } else if (c == Integer.class) {
  -             return "new Integer(" + Integer.valueOf(s).toString() + ")";
  +             if (isNamedAttribute)
  +                 return "new Integer(" + s + ")";
  +             else
  +                 // Detect format error at translation time
  +                 return "new Integer(" + Integer.valueOf(s).toString() + ")";
            } else if (c == short.class) {
                return "((short) " + Short.valueOf(s).toString() + ")";
            } else if (c == Short.class) {
  -             return "new Short(" + Short.valueOf(s).toString() + ")";
  +             if (isNamedAttribute)
  +                 return "new Short(" + s + ")";
  +             else
  +                 // Detect format error at translation time
  +                 return "new Short(\"" + Short.valueOf(s).toString() + "\")";
            } else if (c == long.class) {
                return Long.valueOf(s).toString() + "l";
            } else if (c == Long.class) {
  -             return "new Long(" + Long.valueOf(s).toString() + "l)";
  +             if (isNamedAttribute)
  +                 return "new Long(" + s + ")";
  +             else
  +                 // Detect format error at translation time
  +                 return "new Long(" + Long.valueOf(s).toString() + "l)";
            } else if (c == Object.class) {
                return "new String(" + quoted + ")";
            } else {
  
  
  

--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

Reply via email to