JSF f:ajax 监听器 vs commandButton 动作

Posted

技术标签:

【中文标题】JSF f:ajax 监听器 vs commandButton 动作【英文标题】:JSF f:ajax listener vs commandButton action 【发布时间】:2012-08-26 16:55:12 【问题描述】:

我很好奇这两种执行 ajax 调用的方式有什么区别:

<h:commandButton value="Submit" action="#bean.action">
   <f:ajax execute="@form" render="component"/>
</h:commandButton>

<h:commandButton value="Submit">
   <f:ajax listener="#bean.action" execute="@form" render="component"/>
</h:commandButton>

似乎人们更经常使用第一种方式,但第二种方式似乎也可以正常工作......

【问题讨论】:

【参考方案1】:

第一种方式允许通过返回String 结果进行导航,而第二种方式则不允许。如果客户端禁用了 JS,第二种方式不会调用任何东西,而第一种方式 gracefully degrades。确实,第一种方式用得比较多。

第二种方式是组件中唯一没有action属性的方式,如&lt;h:selectOneMenu&gt;等。

【讨论】:

以上是关于JSF f:ajax 监听器 vs commandButton 动作的主要内容,如果未能解决你的问题,请参考以下文章

JSF2 <h:selectOneMenu 和 <f:ajax 侦听器在 PrettyFaces 过滤器导航之后未调用

JSF 2 - 如何将 Ajax 侦听器方法添加到复合组件接口?

JSF 在 f:ajax 之后执行 javascript

JSF 自定义组件:如何获取 <f:ajax /> 的属性

JSF action vs actionListener [重复]

使用 f:ajax 时 JSF 不触发 bean setter