Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsf 2 将actionListener方法名称作为参数传递到包含视图_Jsf 2_Facelets - Fatal编程技术网

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

Jsf 2 将actionListener方法名称作为参数传递到包含视图,jsf-2,facelets,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:inc

我试图将操作参数传递给页面中的部分视图,但出于某种原因,它表示我的参数为
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:]
但我得到以下例外:

<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
参数时,一切正常,当方法没有参数时,一切正常。

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

actionListener="#{bean.method()}"
这确实需要一种无争论的方法。然而,标准的JSF方式如下

actionListener="#{bean.method}"
它实际上需要一个
ActionEvent
参数。您的问题历史确实表明,您一直在使用EL2.2语法,因此您以某种方式假设它是“标准”,而事实并非如此

当参数化包含模板的
actionListener
方法时,就像使用
actionListener=“#{bean[action]}”
的方法一样,
actionListener
方法被解释为

actionListener="#{bean.method}"
因此需要一个
ActionEvent
参数

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

  • 在方法中指定
    ActionEvent
    参数,无借口

  • actionListener
    替换为
    action
    。保持方法
    无效
    没有问题。如果EclipseEL验证出现问题,只需在首选项中进行验证即可

  • 使用EL 2.2语法,如so
    actionListener=“#{bean[action]()}”
    。然而,在早期的Tomcat和Glassfish版本中,这一点很明显

  • 另见:

    事实证明,使用“action”并不是“actionListener”的替代品,这就解决了我的问题。我不知道为什么它对actionListener不起作用。如果
    deleteAll
    方法有
    ActionEvent
    参数,你能检查它是否起作用吗?我想我以前有过这种情况,这就解决了问题。这样,当bean通过
    ui:param
    传递时,no-arg方法不起作用!但我有其他方法作为ActionListener,它们在没有任何参数的情况下工作。i、 e:如果我不使用包含的视图,同样的方法也适用于actionListener(没有参数)。