2

我需要在显示 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>

还不错,它甚至可以工作,但仍然存在问题。此对话框通过对RequestContextJava 代码的调用显示,还有一个全局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。

4

1 回答 1

0

在RequestContext之前调用方法

于 2014-07-11T10:38:40.997 回答