【发布时间】:2013-05-01 17:02:15
【问题描述】:
我的 facelet 中有类似的代码...
<c:foreach items=#{myBean.listOfA} var="a">
<c:foreach items=#{myBean.listOfB} var="b">
<c:set var="aName" value="#{a.name}">
<c:set var="component" value="#{b.associatedComponent(aName)}">//this wont resolve
//do stuff with component
</c:foreach>
</c:foreach>
myBean 是一个会话范围的 bean。 A 和 B 类都在 bean 内的列表中维护,但只是模型对象而不是托管 bean。
也就是说,我假设的方法 b.associatedComponent(a) 应该解析为我已经检查过很多次的 b.getAssociatedComponent(A a)。所有方法都是公开的。我该怎么做才能使 EL 可以访问该方法?
无论我尝试什么,我都会在相关组件上得到一个 PropertyNotFoundException。
附:我也试过像这样把方法移到bean上...
<c:set var="component" value="#{myBean.associatedComponent(b, aName)}">
这也不起作用并抛出相同的 PropertyNotFoundException。
【问题讨论】:
-
AFAIK,如果该方法接受一个参数,它就不再是一个 getter,因此 EL 会寻找一个方法
associatedComponent(A),而不是getAssociatedComponent(A)。 -
@JB Nizet 我也尝试将其重命名为 associatedComponent(A),但没有成功,我会重试。
-
@JBNizet 我确认将方法重命名为完全“关联组件(A)”并没有解决问题。
-
你的环境是什么?您部署到的服务器是什么?您是否知道使用参数调用方法只是自 EL 2.2 以来的一个选项,它与 Servlet 3.0 密切相关?
-
我正在使用 EL 2.2 myBean.list.size() 没有问题,所以我很确定这不是问题。