JSF f:ajax listener vs commandButton action

时间:2012-08-31 21:29:05

标签: ajax jsf-2

我很好奇这两种执行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 个答案:

答案 0 :(得分:13)

第一种方式允许通过返回String结果而不是第二种方式进行导航。如果客户端已禁用JS,第二种方式将不会调用任何内容,而第一种方式gracefully degrades。实际上,第一种方式更经常使用。

第二种方式是没有action属性的组件的唯一方法,例如<h:selectOneMenu>等。