0

我的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。

PS我也试过像这样将方法移动到bean...

<c:set var="component" value="#{myBean.associatedComponent(b, aName)}">

这也不起作用并引发相同的 PropertyNotFoundException。

4

1 回答 1

0

这将不起作用,因为c:set标签需要ValueExpression属性valuea。这意味着您只能使用属性 - 而不是方法。

如果您使用像这里这样的参数,#{b.associatedComponent(aName)}那么您所拥有的是方法调用,而不是属性调用。但是,这是有效的MethodExpression,可以在action命令链接的属性等地方使用。有关这方面的更多详细信息,请参阅API 文档规范

于 2013-05-01T17:52:12.223 回答