Details
-
Bug
-
Status: Closed
-
Critical
-
Resolution: Fixed
-
1.0
-
None
-
Operating System: All
Platform: PC
-
29402
Description
Runing Tomcat 5.0.14 and 5.0.25. Using Apache standard.jar taglibs.
I am writing a custom tag that accept el expression in attributes. My tag class
is using pageContext.getExpressionEvaluator.evaluate to evaluate el expressions.
In a jsp page, when using only my custom tag like this:
<mytag:setLocale value="${cookie.Language.value}"/>, it work fine and evaluate
to the correct cookie value.
But when I am using any tag from standard.jar, problem occurs. For example,
when inserting <c:out value="${cookie.Language.value"}/> before
mytag:setLocale, pageContext.getExpressionEvaluator.evaluate throws a
ClassCastException. When c:out is inserted after mytag:setLocale, the
ClassCastException is thrown from standard.jar.
I have found the potential cause: when mytag:setLocale is called first,
pageContext.getExpressionEvaluator.evaluate appens to add in the pageContext
attributes hashMap an object of type org.apache.commons.el.ImplicitObjects with
key "org.apache.taglibs.standard.ImplicitObjects". Then when c:out is called
next, it retreive the from the pageContext the
key "org.apache.taglibs.standard.ImplicitObjects", wich is not of type
org.apache.taglibs.standard.lang.jstl.ImplicitObjects. The reverse appens when
c:out is called first; an object with the
key "org.apache.taglibs.standard.ImplicitObjects" of type
org.apache.taglibs.standard.lang.jstl.ImplicitObjects is added in the
pageContext attributes hashMap. And when mytag:setLocale is called,
org.apache.commons.el.ImplicitObjects.getImplicitObjects throws a
ClassCastException when pContext.getAttribute returns with an object of type
org.apache.taglibs.standard.lang.jstl.ImplicitObjects.
The source of the problem is that both package insert or retreive from the
pagecontext attributes hashMap the same key name
("org.apache.taglibs.standard.ImplicitObjects"), but with different type. Base
on the key name, I guess standard.jar is correct in using it, but commons-
el.jar is not.
I tested a modified commons-el.jar with member sAttributeName from
org.apache.commons.el.ImplicitObjects setted to,
well, "org.apache.commons.el.ImplicitObjects". It worked just fine both cases.
The problem would only occurs if el evaluator from both package are called in
the same jsp page with jsp's implicit objects. I dosen't have to be the same
implicit object.
Since I can't beleive I am the first one with this problem, I first tried find
something wrong in my setup/code. But it seems not.