JSF f:ajax listener vs commandButton action

And*_*eiM 7 ajax jsf-2

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

<h:commandButton value="Submit" action="#{bean.action}">
   <f:ajax execute="@form" render="component"/>
</h:commandButton>
Run Code Online (Sandbox Code Playgroud)

<h:commandButton value="Submit">
   <f:ajax listener="#{bean.action}" execute="@form" render="component"/>
</h:commandButton>
Run Code Online (Sandbox Code Playgroud)

人们似乎更频繁地使用第一种方式,但第二种似乎也很好用......

Bal*_*usC 13

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

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