在JSF中提交失败后,对话框中的验证错误未更新

时间:2014-06-02 20:00:06

标签: ajax validation jsf java-ee primefaces

所以我点击一个打开对话框的按钮。在此对话框中,我想在表单中填写信息并提交并保存。为了提交,需要一些inputTexts。所以我使用required =“true”属性。它会停止提交,但不会使用所有内容的红色轮廓更新字段。现在,如果我点击取消并再次打开对话框,它将显示红色轮廓验证失败的字段!

我想我可以通过在我尝试提交表单时手动更新对话框来解决这个问题。这只会导致对话框关闭,而不是保持打开状态并刷新对话框以显示验证失败。

这是对话框,当我点击保存按钮时,我提交表单

<h:form>

    <p:dialog header="#{headerValue}" widgetVar="#{uniqueId}_editDialog"
        modal="false" showEffect="fade" styleClass="dialogGrid"
        dynamic="true" draggable="true" resizable="false">
        <p:outputPanel style="text-align:center;" layout="block">
         <p:messages autoUpdate="true"/>
            <ui:insert name="editContent">
      Edit Content Here. Use 'selectedModel.whatever'
    </ui:insert>
            <p:panelGrid columns="3" styleClass="buttonGrid">
                <ui:insert name="saveButton">
                    <p:commandButton iconPos="left" value="#{msg.save}"
                        rendered="#{'VIEW' != selectedModel.viewState}"
                        process="@widgetVar(#{uniqueId}_editDialog)"
                        action="#{adapterInjector.add(modelList, selectedModel)}"
                        update="@widgetVar(#{uniqueId}_itemsDataList) @widgetVar(#{uniqueId}_addButton) @widgetVar(#{uniqueId}_editDialog)"
                        oncomplete="if(!args.validationFailed) PF('#{uniqueId}_editDialog').hide()"
                        partialSubmit="true" validateClient="true">
                    </p:commandButton>
                </ui:insert>

                <p:commandButton iconPos="right" value="#{msg.cancel}"
                    process="@this" oncomplete="PF('#{uniqueId}_editDialog').hide()"
                    resetValues="true" partialSubmit="true">
                </p:commandButton>
            </p:panelGrid>
        </p:outputPanel>
    </p:dialog>
</h:form>

这是一个插入的组件,它具有必需的属性

    <p:selectOneMenu id="licenseCert"
                    value="#{selectedModel.selectedLicenseCert}" filter="true"
                    required="true">
                    <f:selectItem itemLabel="#{msg.selectOne}" itemValue=""
                        noSelectionOption="true" />
                    <f:selectItems value="#{licCert.allLicenseCertMap.entrySet()}"
                        var="entry" itemValue="#{entry.key}" itemLabel="#{entry.value}" />
                </p:selectOneMenu>
            </p:column>

1 个答案:

答案 0 :(得分:2)

原来这解决了这个问题。

为了达到最佳实践,您应该:

  1. 移动对话框中的<h:form>
  2. 处理保存按钮中移动的<h:form>