我正在尝试将动作参数传递给我的页面中的局部视图,但出于某种原因,它表示我的参数是null,即使它是在外部页面中使用的bean.
页:
<ui:include src="/templates/common/ajaxConfirmPopup.xhtml">
<ui:param name="bean" value="#{paginaBean}" />
<ui:param name="action" value="deleteAll" />
</ui:include>
Run Code Online (Sandbox Code Playgroud)
在部分中调用动作:
actionListener="#{bean[action]}"
Run Code Online (Sandbox Code Playgroud)
但我得到以下异常:
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:]
Run Code Online (Sandbox Code Playgroud)
难道我做错了什么?
注意:当方法有ActionEvent参数时,一切正常,当方法没有参数时,它不工作.
如果您已经actionListener在EL 2.2语法中声明了方法而没有任何参数,则可以解释此问题,如下所示:
actionListener="#{bean.method()}"
Run Code Online (Sandbox Code Playgroud)
确实期望一种无争议的方法.但是,标准的 JSF方式如下
actionListener="#{bean.method}"
Run Code Online (Sandbox Code Playgroud)
真的希望有一个ActionEvent论点.你提的问题确实历史表明您正在使用EL 2.2语法所有的时间,因此你会莫名其妙地认为它是"标准",而事实并非如此.
当参数化actionListener包含模板的方法时actionListener="#{bean[action]}",如actionListener方法中所示,该方法被解释为
actionListener="#{bean.method}"
Run Code Online (Sandbox Code Playgroud)
因此期望一个ActionEvent论点.
您基本上有3个选项来解决此问题:
ActionEvent在方法中指定参数,没有任何借口.
替换actionListener为action.保持该方法没有问题void.如果如Eclipse的EL验证抽搐,只是语气它的偏好.
像这样使用EL 2.2语法actionListener="#{bean[action]()}".然而,早期的Tomcat和Glassfish版本都失败了.
| 归档时间: |
|
| 查看次数: |
2879 次 |
| 最近记录: |