在p:dialog show上调用bean方法

时间:2013-11-08 14:41:53

标签: jsf jsf-2 primefaces dialog initialization

我需要在显示<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设置为{{1}的原因} - 据我所知,它应该触发true,因此,触发状态对话框)。但是,这不起作用。 ajaxStatus通话期间不会显示状态对话框。

据我所知,这种情况正在发生,因为在上一次请求之前调用了remove命令(导致someBean.init()被更新并显示RequestContext)调用了完整事件。但是,在发送someDialog请求之后,将调用此完整事件,状态对话框将在someBean.init()完成之前消失。

我能找到的唯一解决方法是第二个状态对话框,从主要对话框中复制:

someBean.init()

这就像我需要的那样,但它非常难看。有没有办法以更清洁的方式做我想要的事情?

我正在使用JSF 2.1和Primefaces 3.4.1。

1 个答案:

答案 0 :(得分:0)

在Requestcontext

之前调用该方法