【问题标题】:invoke bean method on p:dialog show在 p:dialog show 上调用 bean 方法
【发布时间】: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


    【解决方案1】:

    在RequestContext之前调用方法

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-15
      • 2014-06-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-15
      • 2015-05-13
      相关资源
      最近更新 更多