CommandButton的执行顺序
相关阅读:
- https://stackoverflow.com/questions/25339056/understanding-primefaces-process-update-and-jsf-fajax-execute-render-attributes
- https://www.it-swarm.cn/zh/jsf/%E6%8C%89%E4%B8%8Bprimefaces-p%EF%BC%9Acommandbutton%E6%97%B6%E4%BA%8B%E4%BB%B6%E7%9A%84%E6%89%A7%E8%A1%8C%E9%A1%BA%E5%BA%8F/1042815206/
- 用户单击客户端中的按钮
- onclick执行JavaScript代码
- JavaScript根据process和当前HTML DOM树准备ajax请求
- onstart执行JavaScript代码
- JavaScript从客户端向服务器发送ajax请求
- JSF检索ajax请求
- JSF根据process处理JSF组件树上的请求生命周期
- actionListener执行JSF支持bean方法
- action执行JSF支持bean方法
- JSF根据update和当前的JSF组件树准备ajax响应
- JSF将Ajax响应从服务器发送到客户端
- JavaScript检索ajax响应
- 如果HTTP响应状态为200,则执行onsuccess JavaScript代码
- 否则,如果HTTP响应状态为500,则执行onerror JavaScript代码
- JavaScript根据ajax响应和当前HTML DOM树执行update
- oncomplete执行JavaScript代码
请注意,已执行update之后actionListener,因此,如果您使用onclick或onstart来显示对话框,则它可能仍显示旧内容而不是更新内容,这对用户体验不利。然后,最好使用oncomplete来显示对话框。还要注意,当您打算执行业务操作时,最好使用action而不是actionListener。
<p:commandButton id="viewButton" value="View"
actionlistener="#{userBean.setResultsForSelectedRow}" ajax="false"
update=":selectedRowValues"
oncomplete="PF('selectedRowValuesDlg').show()">
</p:commandButton>