我正在尝试通过以下方式从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规格换句话说,我很惊讶这会在
玻璃鱼。