【问题标题】:JSF - actionListener tag calls method which doesn't take an ActionEvent parameterJSF - actionListener 标记调用不带 ActionEvent 参数的方法
【发布时间】:2013-01-01 04:36:24
【问题描述】:

我一直在阅读那些说 ActionListener 方法必须具有以下签名的帖子:

public void calledByActionListener(ActionEvent e) {
}

像这样调用:

<p:commandButton value="Example" id="example" process="@this" ajax="false" 
    actionListener="#{exampleBean.calledByActionListener()}">

但是我有一个像这样有效的无参数方法:

public void calledByActionListener() {
}

有什么变化吗?

【问题讨论】:

    标签: jsf methods primefaces arguments el


    【解决方案1】:

    是的,这就是 EL 2.2 使用自定义参数调用方法的新功能。基本上,您是在显式调用无参数方法。这个结构是合法的。

    请注意,这与 JSF2 无关。 EL 2.2 恰好是 Java EE 6 的一部分,就像 JSF2 一样。所以它看起来是一个新的 JSF2 特性。但实际上并非如此。作为证据,JSF2 向后兼容 Java EE 5,因此意味着 EL 2.1,但这种结构在那里不起作用。

    当没有在方法表达式中明确指定任何自定义参数时,JSF 将按照规范在实际方法中假定默认参数为ActionEvent

    【讨论】:

    • 感谢您的澄清。这是说,在 EL2.2 上的 actionListener="#{exampleBean.calledByActionListener()}" 是有效的,但是 actionListener="#{exampleBean.calledByActionListener}" (没有括号)会假定 ActionEvent 的默认参数?
    • 没错。如果您通过括号明确指定任何参数,它将覆盖默认签名。即使这是一个毫无争议的()。顺便说一下,action 方法也是如此,它已经默认为无参数的方法。
    猜你喜欢
    • 2011-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-13
    • 1970-01-01
    • 2012-01-27
    • 2014-03-23
    • 1970-01-01
    相关资源
    最近更新 更多