2012-04-18 22 views
2

我看到几个问题,询问如何将参数传递给JSF方法。使用EL2.2和servlet 3.0,它使用户可以将参数传递给方法调用。 一个例子:How to pass an argument to method from rendered h:outputText?问题是:在JSF 2.x中,每个标签属性都应该采用ValueExpression或MethodExpression。在链接的例子中,“渲染”应该只采用ValueExpression。但是我确实看到它仍然适用于MethodExpression,如果我们把()清除它是一个方法调用而不是一个属性。这是JSF 2.x规范刚刚搞砸了还是我错过了什么?为什么EL 2.2的JSF 2.x允许MethodExpression用于ValueExpression?

回答

1

在值表达式中使用新的EL 2.2 invoking-methods-with-arguments语法不会自动使其成为方法表达式或其他东西。这仍然是一个价值表达。值表达式使用给定EL表达式的返回值作为值。方法表达式在与组件关联的动作事件时调用给定的EL表达式。

EL表达式本身是否调用属性getter方法或具有参数的任意方法对于如何处理整个EL表达式无关紧要。

+0

BalusC,非常感谢您的快速回复。我喜欢你的JSF博客,它对我有很大的帮助。你的回答是有道理的。但是我仍然有困惑。使用EL的技术(例如JSF 2.x)决定EL是否被视为ValueExpression或MethodExpression。因此,如果对于JSF操作属性,我使用action =“aBean.aMethod()”,如果aMethod返回文字字符串“aBean.action”,那么您是否说在aBean中的操作方法将被调用? EL表达式中的声音总是在JSF的机制之前首先被调用,如果我们在EL中有(),那么它将使用getter而不是调用方法。 – 2012-04-18 13:42:50

+0

不,它是以每个属性为基础来决定的标签处理程序。您可以在[标签文档](http://docs.oracle.com/javaee/6/javaserverfaces/2.1/docs/vdldocs/facelets/)中看到它的处理方式(选中“类型”列,例如[ 'H:commandButton'](http://docs.oracle.com/javaee/6/javaserverfaces/2.1/docs/vdldocs/facelets/h/commandButton.html))。这不依赖于EL语法。 – BalusC 2012-04-18 13:44:16

+0

同意,标签处理程序决定。但标签处理程序来自JSF实现。所以这是JSF决定的。我刚刚修改了这些意见。如果你有时间,你能详细说明一下吗?谢谢。 – 2012-04-18 13:49:48

相关问题