Primefaces - 更新模态对话框

时间:2014-03-19 12:02:04

标签: generics primefaces modal-dialog

使用从外部xhtml文件加载的primeface模式对话框时出现问题。

我的意图是:按下按钮应该调用方法" setType"使用参数" T" (调用此方法的原因是根据类型重用对话框)。在此方法期间,dialog.xhtml中的DualList将使用正确的和依赖于类型的数据重新加载。之后,应显示对话框。

我目前的代码是:

<p:commandButton
value="#{bean.value}"
id="button" type="button" icon="ui-icon-newwin"
onclick="varDialog.show()" style="width: 70px;">

<p:ajax listener="#{bean.setType('T'.charAt(0))}"
    update="dialog" />

<p:dialog id="dialog"
    widgetVar="varDialog"
    header="Dialog Header"
    resizable="false" modal="true" dynamic="true" width="900"
    appendToBody="true">
    <ui:include src="dialog.xhtml" />
</p:dialog>
</p:commandButton>

问题是对话框会在显示后立即消失(我的猜测是因为&#39; update =&#34;对话框&#34;&#39;)。但是,省略此代码将在没有可见数据的对话框中结束。


所以我的问题是:如何根据数据加载具有特定类型的通用外部对话框?

2 个答案:

答案 0 :(得分:0)

为什么在这种情况下使用AJAX?我会设置一个动作:

<p:commandButton
    value="#{bean.value}"
    id="button"
    type="button"
    icon="ui-icon-newwin"
    style="width: 70px;"
    action="#{bean.prepareDialog}">

在bean里面:

public void prepareDialog() {
    // Do your things.

    RequestContext context = RequestContext.getCurrentInstance();
    context.execute("dialogWidget.show()");
}

PF中存在一个错误,它要求您在条件的一部分条件中包含动态对话,否则它只会加载并忽略动态。这可能适用于您的方案,但我只是看到您的示例代码后无法对其进行评估。

<c:if test="#{bean.condition != null}">
    <ui:include src="dialog.xhtml"/>
</c:if>

答案 1 :(得分:0)

我自己在阅读这个帖子时找到了答案:http://forum.primefaces.org/viewtopic.php?f=3&t=18503

我犯的第一个错误是嵌套的(一个在main.xhtml中,一个在包含的dialog.xhtml中)。所以 - 在线程的帮助下 - 我将代码更改为以下内容:

<h:form>
<p:commandButton
    value="#{bean.value}"
    id="supplierButton" icon="ui-icon-newwin"
    actionListener="#{bean.prepareDialog('T'.charAt(0))}"
    oncomplete="varDialog.show()"
    update=":tabView:dialog"
    immediate="true" style="width: 70px;">
</p:commandButton>
</h:form>

<p:dialog id="dialog"
    widgetVar="varDialog"
    header="Dialog title"
    resizable="false" modal="true" dynamic="true" width="900"
    appendToBody="true">
    <ui:include src="dialog.xhtml" />
</p:dialog>

这就像一个魅力。