将actionListener方法名称作为参数传递以包含视图

时间:2013-03-14 19:40:53

标签: jsf-2 facelets

我正在尝试将操作参数传递给我的页面中的局部视图,但出于某种原因,它说我的参数是null,即使它是在外页中使用的bean。

网页:

<ui:include src="/templates/common/ajaxConfirmPopup.xhtml">
    <ui:param name="bean" value="#{paginaBean}" />
    <ui:param name="action" value="deleteAll" />
</ui:include>

在部分中调用操作:

actionListener="#{bean[action]}"

但我收到以下异常:

Caused by: javax.el.PropertyNotFoundException: Target Unreachable, identifier 'bean' resolved to null
    at org.apache.el.parser.AstValue.getTarget(AstValue.java:98) [jbossweb-7.0.13.Final.jar:]
    at org.apache.el.parser.AstValue.invoke(AstValue.java:244) [jbossweb-7.0.13.Final.jar:]
    at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:278) [jbossweb-7.0.13.Final.jar:]

我做错了吗?

注意:当方法有ActionEvent参数时,一切正常,当方法没有参数时,它无效。

1 个答案:

答案 0 :(得分:5)

如果您在EL 2.2语法中声明了actionListener方法而没有任何参数,则可以解释此问题如下:

actionListener="#{bean.method()}"

确实期望一种无争议的方法。但是,标准 JSF方式如下

actionListener="#{bean.method}"

真的需要一个ActionEvent参数。您的问题历史确实suggests您一直在使用EL 2.2语法,因此您不知何故认为它是“标准”,而事实并非如此。

参与包含actionListener方法的actionListener="#{bean[action]}"方法时,actionListener方法被解释为

actionListener="#{bean.method}"

因此需要ActionEvent参数。

您基本上有3个选项可以解决此问题:

  1. 在方法中指定ActionEvent参数,没有任何借口。

  2. actionListener替换为action。保持方法void没有问题。如果是Eclipse EL验证混蛋,仅在偏好中tone

  3. 使用EL 2.2语法,如actionListener="#{bean[action]()}"。但是早期的Tomcat和Glassfish版本fails

  4. 另见: