kinman 2002/08/12 15:41:04
Modified: jasper2/src/share/org/apache/jasper/compiler JspUtil.java
Log:
- Fix "EL for primitive types in tag attributes" bug.
Patch by Shawn Bayern <[EMAIL PROTECTED]>
Revision Changes Path
1.10 +58 -6
jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/JspUtil.java
Index: JspUtil.java
===================================================================
RCS file:
/home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/JspUtil.java,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- JspUtil.java 1 Aug 2002 18:47:28 -0000 1.9
+++ JspUtil.java 12 Aug 2002 22:41:04 -0000 1.10
@@ -548,21 +548,73 @@
String fnMap,
String defaultPrefix)
{
+ /*
+ * Determine which context object to use.
+ */
String jspCtxt = null;
if (isTagFile)
jspCtxt = "getJspContext()";
else
jspCtxt = "pageContext";
- return "(" + expectedType.getName() + ") "
+ /*
+ * Determine whether to use the expected type's textual name
+ * or, if it's a primitive, the name of its correspondent boxed
+ * type.
+ */
+ String targetType = expectedType.getName();
+ String primitiveConverterMethod = null;
+ if (expectedType.isPrimitive()) {
+ if (expectedType.equals(Boolean.TYPE)) {
+ targetType = Boolean.class.getName();
+ primitiveConverterMethod = "booleanValue";
+ } else if (expectedType.equals(Byte.TYPE)) {
+ targetType = Byte.class.getName();
+ primitiveConverterMethod = "byteValue";
+ } else if (expectedType.equals(Character.TYPE)) {
+ targetType = Character.class.getName();
+ primitiveConverterMethod = "charValue";
+ } else if (expectedType.equals(Short.TYPE)) {
+ targetType = Short.class.getName();
+ primitiveConverterMethod = "shortValue";
+ } else if (expectedType.equals(Integer.TYPE)) {
+ targetType = Integer.class.getName();
+ primitiveConverterMethod = "intValue";
+ } else if (expectedType.equals(Long.TYPE)) {
+ targetType = Long.class.getName();
+ primitiveConverterMethod = "longValue";
+ } else if (expectedType.equals(Float.TYPE)) {
+ targetType = Float.class.getName();
+ primitiveConverterMethod = "floatValue";
+ } else if (expectedType.equals(Double.TYPE)) {
+ targetType = Double.class.getName();
+ primitiveConverterMethod = "doubleValue";
+ }
+ }
+
+ /*
+ * Build up the base call to the interpreter.
+ */
+ StringBuffer call = new StringBuffer(
+ "(" + targetType + ") "
+ Constants.EL_INTERPRETER_CONDUIT_CLASS + "."
+ Constants.EL_INTERPRETER_CONDUIT_METHOD
+ "(" + Generator.quote(expression) + ", "
- + expectedType.getName() + ".class, "
+ + targetType + ".class, "
+ jspCtxt + ", "
+ prefixMap + ", "
+ fnMap + ", "
- + Generator.quote( defaultPrefix ) + ")";
+ + Generator.quote( defaultPrefix ) + ")");
+
+ /*
+ * Add the primitive converter method if we need to.
+ */
+ if (primitiveConverterMethod != null) {
+ call.insert(0, "(");
+ call.append(")." + primitiveConverterMethod + "()");
+ }
+
+ return call.toString();
}
/**
--
To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>