我在我的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可以访问该方法,我可以做些什么?
无论我怎么尝试,我都会在associatedComponent上得到一个PropertyNotFoundException。
另外,我还尝试将方法移动到bean中,如下所示。
<c:set var="component" value="#{myBean.associatedComponent(b, aName)}">这也不起作用,并抛出相同的PropertyNotFoundException。
发布于 2013-05-02 01:52:12
这将不起作用,因为c:set标记需要value属性的ValueExpression。这意味着您只能使用属性,而不能使用方法。
如果你使用像这里的#{b.associatedComponent(aName)}这样的参数,那么你得到的是方法调用,而不是属性调用。但是,这是一个有效的MethodExpression,可以在命令链接的action属性等位置使用。有关这方面的更多详细信息,请参阅API documentation和spec。
https://stackoverflow.com/questions/16322783
复制相似问题