【发布时间】:2013-11-20 14:52:55
【问题描述】:
我需要在显示<p:dialog> 之前调用一个bean 方法。目前我有以下内容:
<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>
还不错,它甚至可以工作,但仍然存在问题。此对话框通过从 Java 代码调用 RequestContext 显示,还有一个全局 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。
【问题讨论】:
标签: jsf jsf-2 primefaces dialog initialization