我在关闭PrimeFaces对话框时遇到问题。输入字段'username'是必需的:
<p:outputLabel for="username" value="Username: "/>
<p:inputText id="username"
value="#{employeeController.employee.username}" required="true"/>
如果字段为空,我使用以下代码来阻止对话框关闭:
<p:commandButton value="Save" action="{employeeController.doSaveEmployee()}"
oncomplete="if (args && !args.validationFailed) PF('employeeAddDialog').hide()"
update=":employeeForm"/>
但无论是否填写“用户名”,只要我点击“保存”,对话框仍会关闭。当关闭后再次打开对话框显示错误消息时,我知道输入验证有效。
编辑:
<p:dialog header="Create Employee" id="employeeAddDialog" widgetVar="employeeAddDialog" modal="true" showEffect="fade" hideEffect="fade" resizable="false">
<p:outputPanel id="employeeDataCreate">
<h:panelGrid columns="2">
<p:outputLabel for="username" value="Username: " />
<p:inputText id="username" value="#{employeeController.employee.username}" required="true" />
<p:outputLabel for="password" value="Password: " />
<p:password id="password" value="#{employeeController.employee.password}" />
</h:panelGrid>
<h:panelGrid columns="3">
<p:commandButton value="Save" action="#{employeeController.doSaveEmployee()}" oncomplete="if (args && !args.validationFailed) PF('employeeAddDialog').hide()" update=":employeeForm" />
<p:commandButton value="Abort" oncomplete="PF('employeeAddDialog').hide()" />
</h:panelGrid>
</p:outputPanel>
</p:dialog>
这是一些更多的代码。还有什么可能是造成这个问题的原因?
employeeForm
只是一个dataTable
,它列出员工的相应属性。
EDIT2:
EmployeeController
中的此代码会产生想要的行为,但前提是我从“保存”按钮中移除update=":employeeForm"
public void doSaveEmployee() {
employee = employeeService.saveEmployee(employee);
employee = null;
initNewEmployee();
initList();
RequestContext context = RequestContext.getCurrentInstance();
context.execute("PF('employeeAddDialog').hide();");
}
最终编辑:
我的对话框正在关闭,因为我更新了整个表单。将update=":employeeForm"
更改为update=":employeeForm:employeeTable"
会使事情按预期运行。
答案 0 :(得分:1)
我建议在成功保存动作后在employeeController.doSaveEmployee()
中进行近距离操作
RequestContext context = RequestContext.getCurrentInstance();
context.execute("PF('myDialogVar').hide();");
答案 1 :(得分:1)
不确定为什么使用oncomplete =“args&amp; amp; amp; amp; ...”。我从来没有用过它并且效果很好。
oncomplete="if (args && !args.validationFailed) PF('employeeAddDialog').hide()"
我用它像:
oncomplete="if (!args.validationFailed) PF('employeeAddDialog').hide()"
这是一个问题错误吗?