我需要在显示 a 之前调用一个 bean 方法<p:dialog>
。目前我有以下内容:
<p:remoteCommand name="updateDialog" action="#{someBean.init()}"
update="dialog-table" global="true" />
<p:dialog id="someDialog" modal="true" dynamic="false" onShow="updateDialog()">
<ui:include src="some-dialog-content.xhtml" />
</p:dialog>
还不错,它甚至可以工作,但仍然存在问题。此对话框通过对RequestContext
Java 代码的调用显示,还有一个全局ajaxStatus
元素,它在发送 ajax 调用时显示带有微调器的状态对话框,并在此调用完成时隐藏它。但是,someBean.init()
也可能需要一些时间才能完成,因此我想在此init()
过程中也显示此状态对话框(这就是我设置global
为的原因true
- 据我所知,它应该触发ajaxStatus
,因此触发状态对话框)。但是,这不起作用。someBean.init()
通话期间不显示状态对话框。
据我所知,这是因为在调用之前的请求(导致RequestContext
被更新和someDialog
显示)完成事件之前以某种方式调用了这个删除命令。但是,在someBean.init()
发送请求后,会调用此完成事件,并且状态对话框在someBean.init()
完成之前消失。
我能找到的唯一解决方法是第二个状态对话框,从主对话框复制:
<p:dialog modal="true" widgetVar="statusDialog2" ...>...</p:dialog>
<p:remoteCommand name="updateDialog" action="#{someBean.init()}"
update="dialog-table" global="true"
onstart="statusDialog2.show()" oncomplete="statusDialog2.hide()" />
<p:dialog id="someDialog" modal="true" dynamic="false" onShow="updateDialog()">
<ui:include src="some-dialog-content.xhtml" />
</p:dialog>
这就像我需要的那样工作,但它非常难看。有没有办法以更清洁的方式做我想做的事?
我正在使用 JSF 2.1 和 Primefaces 3.4.1。