首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JSF2.0中没有参数的MethodExpression调用

JSF2.0中没有参数的MethodExpression调用
EN

Stack Overflow用户
提问于 2011-09-08 08:45:54
回答 3查看 1K关注 0票数 4

我试图通过以下方式从JSF2.0 facelet调用一个无参数方法

代码语言:javascript
复制
#{myBean.foo()}

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

根据Burns/Schalk:完整的引用:JSF2.0是可能的(第126页,#{userBean.pullValuesFromFlash( )})。

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

“该类‘.’没有属性'foo'"

错误信息。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-09-08 11:06:56

这是JBoss论坛上的回应判断,方法表达式只能在支持它们的属性中使用。

斯坦·西尔弗特写道: 在我看来,这一切都如期而至。这与缺乏论据毫无关系。您的表达式,#{elManagedBean.hello()}被视为一个ValueExpression。如果您将方法更改为getHello(),那么它就会工作。问题是,应该将其视为ValueExpression还是MethodExpression?例如,如果动作属性中有相同的表达式,则它将被视为MethodExpression。 “ 您已经将表达式放在Facelets页面的中间,而不是作为属性值。据我所知,这将永远被视为一个ValueExpression。我看不出这在玻璃鱼身上是怎么回事。有可能有一些代码将其作为ValueExpression进行测试,如果失败,则将其作为MethodExpression进行尝试。然而,我认为这违反了EL规范。换句话说,我很惊讶这会适用于玻璃鱼。

票数 2
EN

Stack Overflow用户

发布于 2011-09-08 12:31:11

McDowell已经回答了问题的原因:内联表达式被视为值表达式,而不是方法表达式。

至于如何实现功能需求,请使用。

代码语言:javascript
复制
<f:event type="preRenderView" listener="#{myBean.foo}" />

这将在呈现响应之前调用该方法。

票数 2
EN

Stack Overflow用户

发布于 2012-12-12 22:36:23

这取决于您在servlet容器上使用的EL版本。如果使用Tomcat 6,则包含El2.1,如果表达式位于Facelets页面的中间,它不支持'()‘作为MethodExpression。Tomcat 7,包括EL 2.2,支持此功能,甚至支持增强的特性,因为它能够将参数传递给方法表达式:

所以你这么做:

代码语言:javascript
复制
<h:outputText value="#{object.test(10)}" ></h:outputText>

并在bean中接收参数(可能需要额外的转换和验证):

代码语言:javascript
复制
public String test(MyObject o)
{
    ...
    return value;
}

参考资料:http://tomcat.apache.org/whichversion.html 使用EL 2.2与Tomcat 6.0.24

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7345417

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档