我的脸上有类似的代码...
<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方法可以访问?
无论我尝试什么,我都会在associatedComponent上得到一个PropertyNotFoundException。
P.S。我也尝试将这个方法移动到这个bean ......
<c:set var="component" value="#{myBean.associatedComponent(b, aName)}">
这也不起作用并抛出相同的PropertyNotFoundException。
答案 0 :(得分:0)
这不起作用,因为c:set
代码需要ValueExpression
属性为value
。
这意味着您只能使用属性 - 而不是方法。
如果您使用像#{b.associatedComponent(aName)}
这样的参数,那么您拥有的是方法调用,而不是属性调用。但是,这是一个有效的MethodExpression
,可以在命令链接的action
属性等位置使用。
有关详细信息,请参阅API documentation和spec。