4

我正在尝试将操作参数传递给我页面中的部分视图,但由于某种原因,它说我的参数是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,当方法没有参数时一切正常。

4

1 回答 1

5

如果您一直actionListener在 EL 2.2 语法中声明没有任何参数的方法,则此问题是可以解释的,如下所示:

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

这确实需要一种无参数的方法。但是,标准的JSF 方式如下

actionListener="#{bean.method}"

这真的需要一个ActionEvent论点。您的问题历史确实表明您一直在使用 EL 2.2 语法,因此您以某种方式认为它是“标准”,而事实并非如此。

当参数化actionListener包含模板的方法时,就像在你的方法中那样actionListener="#{bean[action]}",该actionListener方法被解释为

actionListener="#{bean.method}"

因此,它需要一个ActionEvent论点。

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

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

  2. 替换actionListeneraction。保留方法没问题void。如果例如 Eclipse EL 验证出现问题,只需首选项中调整它。

  3. 像这样使用 EL 2.2 语法actionListener="#{bean[action]()}"。然而,这在早期的 Tomcat 和 Glassfish 版本中失败了。

也可以看看:

于 2013-03-28T14:19:37.960 回答