Re: problem upgrading to JSTL 1.2
- From: "yishayjobs@xxxxxxxxxxx" <yishayjobs@xxxxxxxxxxx>
- Date: Mon, 24 Dec 2007 10:14:38 -0800 (PST)
On Dec 23, 7:35 pm, Lew <l...@xxxxxxxxxxxxx> wrote:
yishayj...@xxxxxxxxxxx wrote:
Hi All,
We in the process of upgrading our JBoss implementation from version
4.0.3 to 4.2.2. This also implies moving from JSTL 1.1 to JSTL 1.2 and
from Tomcat 5 to Tomcat 6.
Now some of our old JSPs don't work.
For example:
<%-- ${currGroup.current.value} is an ArrayList --%>
<c:set var="messageList" value="${currGroup.current.value.list}"/>
throws the following exception:
javax.el.PropertyNotFoundException: Property 'list' not readable on
type java.util.List
I've found out that changing
${currGroup.current.value.list}
to
#{currGroup.current.value.list} fixes this problem. But I wouldn't
want to make this change all across our JSPs. Besides I thought JSTL
1.2 was supposed to be backwards compatible to JSTL 1.1. That's what
it says here:
http://today.java.net/pub/a/today/2006/03/07/unified-jsp-jsf-expressi...
Does anyone have an explanation?
I might, after seeing the definition of the backing bean, particularly the
currGroup object's type, and the declaration of getCurrent(), its type, its
declaration of getValue(), its type in turn, and the declaration of that
type's getList(). The error message indicates that getValue() already returns
a java.util.List(), which of course would not itself have a getList() method.
Incomplete examples lead to incomplete answers.
--
Lew- Hide quoted text -
- Show quoted text -
Thanks for your quick answer. I'll try to add the missing background.
The expression is read from within a forEach loop in the following
manner:
<c:forEach items="${messageGroup}" varStatus="currGroup">
<c:set var="messageList" value="${currGroup.current.value.list}"/>
<%-- this is irrelevant as it never reaches this spot -->
</c:forEach>
messageGroup is a Map<org.apache.struts.action.GLOBAL_MESSAGE,
org.apache.struts.action.ActionMessages.ActionMessageItem>
So the map is iterated over, currGroup.current.value means
org.apache.struts.action.ActionMessages.ActionMessageItem is accessed,
and currGroup.current.value.list would mean
org.apache.struts.action.ActionMessages.ActionMessageItem.getList() is
called. This method does exist, as I've verified in my java code. It's
also part of the API, as explained in
http://struts.apache.org/1.x/struts-core/apidocs/org/apache/struts/action/ActionMessages.ActionMessageItem.html#getList()
------
Perhaps now you can understand my question. Why does this work:
<c:set var="messageList" value="#{currGroup.current.value.list}"/>
while this doesn't?
<c:set var="messageList" value="${currGroup.current.value.list}"/>
.
- Follow-Ups:
- Re: problem upgrading to JSTL 1.2
- From: Lew
- Re: problem upgrading to JSTL 1.2
- References:
- problem upgrading to JSTL 1.2
- From: yishayjobs@xxxxxxxxxxx
- Re: problem upgrading to JSTL 1.2
- From: Lew
- problem upgrading to JSTL 1.2
- Prev by Date: Re: A hash set puzzler
- Next by Date: Re: problem upgrading to JSTL 1.2
- Previous by thread: Re: problem upgrading to JSTL 1.2
- Next by thread: Re: problem upgrading to JSTL 1.2
- Index(es):
Relevant Pages
|
|