我的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 && !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 && !args.validationFailed) changePasswordAdmin.hide()"/>
</h:commandButton>
使用这个非主要按钮的问题是,每次按下它都会关闭对话框,而不是取决于验证成功。
有没有人知道如何在这种特定情况下使用h:commandButton
?
答案 0 :(得分:3)
出现此问题的原因是未捕获的参考错误:未定义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>