使用h:commandButton阻止p:对话框关闭

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用h:commandButton阻止p:对话框关闭相关的知识,希望对你有一定的参考价值。

我对p:对话框有问题。我使用它作为我的JSF 2.2应用程序的一部分:

<p:dialog id="cpaDialog" width="300px" widgetVar="changePasswordAdmin" header="#{msg['account.password.change']}" draggable="false" resizable="false">
    <h:form id="changePasswordAdminForm">
        <h:commandButton immediate="true" value="#{msg['cancel']}" onclick="PF('changePasswordAdmin').hide();"/>
        <p:commandButton id="submitCpa" update="changePasswordAdminForm" value="#{msg['submit']}" action="#{accountEditBean.changeAdminPassword()}" oncomplete="if (args &amp;&amp; !args.validationFailed) changePasswordAdmin.hide()"/>

        <!-- THERE ARE REQUIRED FIELD -->

    </h:form>
</p:dialog>

目前我正在使用p:commandButton提交表单并在验证成功通过后关闭对话框。问题是我想在那里使用h:commandButton。你可能会问为什么。案例很简单。我需要这个按钮看起来像标准的h:commandButton,没有应用任何Primefaces样式类。

可能你会告诉我:'从primefaces按钮中删除所有样式类'。我知道这是可能的(但不是那么有效)我宁愿在这里使用h:commandButton,如果可能的话。

我试过这个:

<h:commandButton id="submitCpa" value="#{msg['submit']}" action="#{accountEditBean.changeAdminPassword()}" >
    <f:ajax onevent="if (args &amp;&amp; !args.validationFailed) changePasswordAdmin.hide()"/>
</h:commandButton>

使用这个非primefaces按钮我的问题是它每次按下它时关闭对话框,而不是取决于验证成功。

有谁知道如何在这种特定情况下使用h:commandButton

答案

出现问题的原因是未捕获的引用错误:未定义args。该错误负责使对话框关闭。

我的建议是,您使用以下内容将对话框关闭操作委托给Managed Bean:

org.primefaces.context.RequestContext context = RequestContext.getCurrentInstance();
context.execute("changePasswordAdmin.hide()");

您的按钮可以像这样呈现:

<h:commandButton id="submitCpa" value="#{msg['submit']}"  >
    <f:ajax listener="#{accountEditBean.changeAdminPassword()}" execute="changePasswordAdminForm" render="changePasswordAdminForm" />
</h:commandButton>

以上是关于使用h:commandButton阻止p:对话框关闭的主要内容,如果未能解决你的问题,请参考以下文章

h:button和h:commandButton之间的区别

在使用 p:commandButton 导航时调用 f:viewAction 中的操作

JSF2 commandButton 操作未在更新的片段中调用

h:button 和 h:commandButton 之间的区别

h:commandButton 在 h:dataTable 中不起作用

两个不同的 h:commandButton 动作的条件渲染