<p:commandButton BEDINGT onclick-Ereignis
ich habe ein jsf-Formular mit einem Eingabefeld und einem speichern-button, wie im code unten. Was ich erreichen möchte ist, wenn der speichern-button geklickt haben, wird die Eingabe validiert werden soll mit der regex-Muster. Wenn die Validierung fehlgeschlagen ist, keine save-confirmation-dialog angezeigt werden soll. Ansonsten ein save-confirmation-dialog angezeigt, und dem Benutzer die Möglichkeit zu wählen, ob speichern oder nicht.
In den folgenden code, der dialog hat immer gezeigt, trotz der bedingten onclick="if(#{conditionOK}). Ich will keine Bestätigung-dialog hat gezeigt, wenn conditionOK gibt false zurück!!! Nach vielen versuchen, ich denke, die facescontext.isValidateFailed() wird nicht neu evalutated.
Bitte helfen 🙁
Alles, was ich will, ist nur zu prüfen, ob die regex-Validator gibt true zurück. Für diesen Fall, den Bestätigung-dialog angezeigt werden soll.
Mein Ansatz falsch sein könnte. Vielen Dank, wenn Sie Jungs haben auch andere Lösungen.
<h:form id="save_all_form">
<p:inputTextarea rows="1" style="width:100%;resize:none"
value="#{cusBean.saveAll}" autoResize="false"
validatorMessage="Wrong format">
<f:validateRegex pattern="#{msgs.pattern}" />
</p:inputTextarea>
<ui:param name="conditionOK"
value="#{facesContext.postback and !facesContext.validationFailed}" />
<p:commandButton value="#{msgs.button_overwrite_all}"
onclick="if(#{conditionOK}){confirmation.show()}"/>
</h:form>
- Also, wenn die Seite gerendert wird, und der Benutzer tippt etwas in die textarea, die nicht vorübergehen wird die Validierung, die Sie möchten, um zu zeigen, das Bestätigungs-Dialogfeld? Bitte erläutern Sie den Prozess ein wenig mehr ins Detail.
- Ich aktualisiert meine Frage. Seine ärgerlich, dass jemand bearbeitet worden ist die Frage.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich glaube nicht, dass die JSF-Validierung ist der Weg zu gehen für Sie. Es soll verhindert werden, dass die änderung der Modell-Daten in dem Fall, dass die Validierung fehlschlägt.
Und wenn Sie möchten, um eine check-in JavaScript-Sie müssen aktualisieren Sie den Abschnitt im HTML-Format. JavaScript nicht auswerten der
Expression
, also der Wert, wenn der view gerendert wurde das erste mal wird immer verwendet werden.Versuchen Sie die folgenden in das xhtml:
Und fügen Sie diese Methode in
CusBean
:Das Ergebnis wird sein, dass es nicht JSF-Validierung stattfindet und der Wert der textArea übermittelt wird, jedes mal, wenn Sie es ändern. Plus die Befehlsschaltfläche-Abschnitt ist aktualisiert, so dass der Zustand aktualisiert werden.
if(#{conditionOK}){confirmation.show()}
ist ein JavaScript-Aufruf und wie Sie Sie nie aktualisieren der Befehlsschaltfläche#{conditionOK}
wird immer der erste Wert, dertrue
. Ausdrücke werden nur ausgewertet, unter " view render time.Wie die andere Antwort erklärt
onclick
Veranstaltung ist zu früh, um zu prüfen, die Validierung status einer JSF-Anfrage(mit!facesContext.validationFailed
), weil der Antrag noch nicht eingereicht ist noch; die Validierung nicht ausgeführt wurde, so dass die Validierung status wird immer falsch sein (well, sort of) währendonclick
.Also, was Sie tun müssen, ist die Durchführung eines ajax-Validierung des Feldes (wie gezeigt in der früheren Antwort) und verwenden Sie dann die primefaces
args
variable überprüfen Sie den status der Anfrage: