Wie kann ich verhindern, dass die nächste Schaltfläche des PrimeFaces-Assistenten die Client-Validierung aktiviert?

Ich habe in meiner JSF 2.2 + PrimeFaces-Anwendung einen Assistenten mit drei Registerkarten. In jeder Registerkarte habe ich ein Formular, um Daten vom Benutzer zu erfassen. Jedes dieser Formulare hat einige Validierungen. Wenn ich jetzt auf "Weiter" klicke, um zur nächsten Registerkarte zu gelangen, werden die Daten aus dem Formular überprüft. Ich möchte nicht, dass das passiert.

Der Benutzer speichert Daten in den Daten auf einer Registerkarte und möchte dann weiter voranschreiten. Es ist NICHT erforderlich, Daten im Formular zu haben, um zur nächsten Registerkarte zu gelangen.

Ich konnte dieses Problem beheben, indem ich KEINE clientseitige Validierung durchgeführt habe (d. H. Das @ nicht verwendet haberforderlic word in den Eingabefeldern) und Validierung nur im Backend. Das Problem ist, ich möchte die clientseitige Validierung.

Mein Assistent sieht folgendermaßen aus:

<h:form id="wizard">

    <p:wizard flowListener="#{afiliadoController.onFlowProcess}" nextLabel="Siguiente" 
    backLabel="Anterior" showStepStatus="true">

    <p:tab id="afiliadoTab" title="Afiliado">

            <p:growl autoUpdate="true"/>

            <p:panel styleClass="panels" id="panelAfiliado" style="margin-bottom:1em;" >

                <p:focus context="panelAfiliado"/>

                <h1> Agregue un Afiliado </h1>

                <h:panelGrid columns="4" styleClass="panelGrid" >

                    <p:outputLabel for="nombres" value="Nombres:" />

                    <p:inputText id="nombres" value="#{afiliadoController.afiliado.nombre}"
                    requiredMessage="Debe insertar un nombre." />

                    <p:outputLabel for="apellidos" value="Apellidos:" />

                    <p:inputText id="apellidos" value="#{afiliadoController.afiliado.apellido}"
                    requiredMessage="Debe insertar un apellido." />

                    <p:outputLabel for="estadoCivil" value="Estado Civil:" />

                    <p:selectOneMenu id="estadoCivil" effect="drop" value="#{afiliadoController.afiliado.estado_civil}" 
                    requiredMessage="Debe seleccionar un estado civil." >

                        <f:selectItem itemLabel="Estado Civil" itemValue=""/>
                        <f:selectItem itemLabel="Soltero" itemValue="S"/>
                        <f:selectItem itemLabel="Casado" itemValue="C"/>
                        <f:selectItem itemLabel="Union Libre" itemValue="U"/>
                        <f:selectItem itemLabel="Divorciado" itemValue="D"/>
                        <f:selectItem itemLabel="Viudo" itemValue="V"/>

                    </p:selectOneMenu>

                    <p:outputLabel for="direccion" value="Direccion:" />

                    <p:inputText id="direccion" value="#{afiliadoController.afiliado.direccion}"/>

                    <p:outputLabel for="telefono" value="Telefono:" />

                    <p:inputMask id="telefono" value="#{afiliadoController.afiliado.telefono}" mask="(999) 999-9999" 
                    requiredMessage="Debe insertar un telefono." />

                    <p:outputLabel for="fechaNacimiento" value="Fecha de Nacimiento:"/>

                    <p:calendar id="fechaNacimiento" yearRange="c-100:c" pattern="dd/MM/yyyy" navigator="true" 
                    value="#{afiliadoController.afiliado.fecha_nacimiento}" 
                    requiredMessage="Debe insertar su fecha de nacimiento." showOn="button" 
                    readonly="#{facesContext.currentPhaseId.ordinal eq 6}">

                        <p:ajax event="dateSelect" listener="#{afiliadoController.dateSelect}" update="edadAfi"/>

                    </p:calendar>

                    <p:outputLabel for="plan" value="Plan:" />                  
                    <p:selectOneMenu id="plan" effect="drop" value="#{afiliadoController.afiliado.plan}" 
                    requiredMessage="Debe seleccionar un plan." >

                        <f:selectItem itemLabel="Seleccione un plan" itemValue=""/>
                        <f:selectItem itemLabel="Vital Base" itemValue="1"/>
                        <f:selectItem itemLabel="Vital Elite" itemValue="2"/>
                        <f:selectItem itemLabel="Plan Vital Elite Internacional" itemValue="3"/>

                    </p:selectOneMenu>

                    <h:outputText value="Fecha: #{of:formatDate(now, 'dd/MM/yyyy')}"/>

                    <h:outputText value="Edad Afiliado: #{afiliadoController.afiliado.edad}" id="edadAfi"/>

                    <p:outputLabel for="modalidad" value="Modalidad:" />                    
                    <p:selectOneMenu id="modalidad" effect="drop" value="#{afiliadoController.afiliado.modalidad}" 
                    requiredMessage="Debe seleccionar una modalidad." required="true">

                        <f:selectItem itemLabel="Seleccione una modalidad" itemValue=""/>
                        <f:selectItem itemLabel="Solo Titular Del Contrato" itemValue="A"/>
                        <f:selectItem itemLabel="Titular del Contrato + Grupo Familiar" itemValue="B"/>

                        <f:validateBean disabled="#{!request.getParameter('validate')}" />

                    </p:selectOneMenu>

                    <p:commandButton value="Insertar" icon="fa fa-save" process="panelAfiliado" update="afiliadoTable"
                     actionListener="#{afiliadoController.insertAfiliado}" >

                        <f:param name="validate" value="true"/>

                     </p:commandButton>

                </h:panelGrid>         

            </p:panel>

    </p:tab>

    </p:wizard>

</h:form>

Es ist beabsichtigt, dass nur der erste Tab angezeigt wird, um die Lesbarkeit zu verbessern. Auf dieser ersten Registerkarte habe ich zwei<h:form> innerhalb der Haupt<h:form> (Ich bin nicht sicher, ob dies eine gute Praxis ist.)

Ich mache das, weil ich das @ wieingebe Schlüsselwort, um für jedes Formular separat zu arbeiten. Das<h:form> mit id afiliadoTab hat einige Überprüfungen. Ich möchte, dass diese Überprüfungen nur stattfinden, wenn ich auf die Schaltfläche "@" klick

<p:commandButton value="Insertar" icon="fa fa-save" process="panelAfiliado" update=":wizard:tablaAfiliados:afiliadoTable"
                         actionListener="#{afiliadoController.insertAfiliado}" validateClient="true"/>

Ich möchte nicht, dass diese Überprüfungen stattfinden, wenn ich auf WEITER klicke. Was kann ich tun? (Ich weiß, dass es ein paar ähnliche Fragen in SO gibt, aber ich konnte die Antwort nicht ganz finden. Im folgenden Beispiel werden benutzerdefinierte Widget-Versionen verwendet. Ich habe versucht, dies zu tun, habe jedoch einige Probleme festgestellt:

Wie kann ich die Schaltfläche "Zurück" nur bei Bedarf anzeigen? (Nicht auf der ersten Registerkarte anzeigen)

Die Validierungen sind noch vorhanden, auch wenn ich @ this verwende.

Was sind meine besten Optionen?

Erforderliche Validierung PrimeFaces-Assistent

Antworten auf die Frage(6)

Ihre Antwort auf die Frage