0

当我在其 URI 中使用参数调用页面中的方法时,除非我再次传递 uri 的参数,否则不会调用该方法。例如,如果我有:

http://maywebsite/myapp/mypage.xhtml?mykey=myvalue

此方法会导致错误(显然是因为它在没有参数的情况下再次呈现页面,但从未调用方法 foo):

<h:commandLink value="Do Action" actionListener="#{mybean.foo}"/>

所以我添加了一个 ajax 来只更新组件,但按钮没有被触发:

<h:commandLink value="Do Action" actionListener="#{mybean.foo}">
    <f:ajax render="somecomponent"/>
</h:commandLink>

当我再次传递参数值时,按钮调用该方法就好了:

 <h:commandLink value="Do Action" actionListener="#{mybean.foo}">
     <f:param name="mykey" value="myvalue"/>
     <f:ajax render="somecomponent"/>
 </h:commandLink>

但是,此按钮包含 (ui:include) 在具有不同参数键和值的许多页面中。如何在不传递参数值的情况下调用该方法?

我正在使用 glassfish 3.1.2、jsf 2.0

4

1 回答 1

2

显然,bean 是请求范围的,并且参数在如何呈现命令链接的方式中发挥作用(例如,通过rendered其父组件之一上的属性,或通过包含命令链接的模板的动态包含)。

所有这些条件都在表单提交的应用请求值阶段重新评估。开发人员必须确保所有这些条件与将表单呈现给最终用户时完全相同。因此,当 bean 是请求范围且参数不存在时,命令链接在组件树中显示为未呈现,这样就不会调用它的操作。

将 bean 放在视图范围内是解决此问题的最简单方法(除非您使用动态<ui:include>,否则会更复杂,您需要关闭特定视图的部分状态保存)。

也可以看看:

于 2012-10-19T01:44:09.517 回答