Jsf commandLink不会在URI中包含参数的页面中激发
在URI中包含参数的页面中调用方法时,除非再次传递URI的参数,否则不会调用该方法。例如,如果我有: http://maywebsite/myapp/mypage.xhtml?mykey=myvalue http://maywebsite/myapp/mypage.xhtml?mykey=myvalue 此方法会导致错误(显然是因为它在没有参数的情况下再次呈现页面,但从未调用方法foo):Jsf commandLink不会在URI中包含参数的页面中激发,jsf,Jsf,在URI中包含参数的页面中调用方法时,除非再次传递URI的参数,否则不会调用该方法。例如,如果我有: http://maywebsite/myapp/mypage.xhtml?mykey=myvalue http://maywebsite/myapp/mypage.xhtml?mykey=myvalue 此方法会导致错误(显然是因为它在没有参数的情况下再次呈现页面,但从未调用方法foo): 因此,我添加了一个ajax来只更新组件,但按钮没有被触发: <h:commandLink val
因此,我添加了一个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)。如何在不传递参数值的情况下调用该方法
Im使用glassfish 3.1.2、jsf 2.0显然bean是请求范围的,参数在命令链接的呈现方式中起作用(例如,通过其父组件之一上的
rendered
属性,或者通过包含命令链接的模板的动态包含)
所有这些条件都将在表单提交的应用请求值阶段重新评估。开发人员必须确保所有这些条件与表单呈现给最终用户时完全相同。因此,当bean在请求范围内且参数不存在时,命令链接在组件树中显示为未呈现,这样就不会调用其操作
将bean放入视图范围是解决此问题的最简单方法(除非您使用的是动态的
,否则这会更复杂,您需要关闭特定视图的部分状态保存)
另见:
- -第5点
<h:commandLink value="Do Action" actionListener="#{mybean.foo}">
<f:param name="mykey" value="myvalue"/>
<f:ajax render="somecomponent"/>
</h:commandLink>