我正在尝试通过以下方式从JSF 2.0 Facelet调用无参数方法:

#{myBean.foo()}


(没有任何周围的标签)。

根据Burns / Schalk:可能的完整参考:JSF 2.0(第126页,#{userBean.pullValuesFromFlash()})。

但是,框架将表达式视为值表达式,因此认为foo应该是bean属性。
在JBOSS 7.0.1(和6)上,我得到了一个

“类'...'不具有属性'foo'”

错误信息。

最佳答案

this response on the JBoss forum判断,方法表达式只能在支持它们的属性中使用。


斯坦·希尔弗特(Stan Silvert)写道:

在我看来,这正在按预期方式工作。这没什么可做的
缺乏论据。你的表情
#{elManagedBean.hello()}被视为ValueExpression。如果
您将方法更改为getHello()即可。的
问题是,应将其视为ValueExpression还是
MethodExpression?例如,如果您在
动作属性,将其视为MethodExpression

<h:commandButton value="Hello" action="#{elManagedBean.hello()}"
     id="submit_button"/>


您已将表达式放在
Facelets页,而不是属性值。据我
知道,这将始终被视为ValueExpression。我没看到
这在Glassfish中如何工作。可能有一些
代码以ValueExpression的形式尝试,然后以
MethodExpression如果失败。但是,我认为这会违背
EL规格换句话说,我很惊讶这会在
玻璃鱼。

07-27 20:16