Der Versuch sofort zu verstehen = "wahr" Eingaben zu überspringen, wenn es nicht sein sollte

Gerade als ich dachte ich hätte sofort verstanden ... * seufz *

Betrachten Sie die folgende JSF-Seite:

<h:inputText value="#{testBean.text}" required="true" />
<h:commandButton actionListener="#{testBean.doFoo}" value="Do Foo" />
<h:commandButton immediate="true" actionListener="#{testBean.doBar}" value="Do Bar" /><br />
<h:outputText value="#{testBean.didSomething}" />

Und diese Hintergrundbohne:

public class TestBean {
   private String didSomething = "Nothing done yet";
   // + getter

public void doFoo() {
    didSomething = "Did foo!";        
}

public void doBar() {
    didSomething = "Did bar!";        
}

Von allem, was ich über Sofort gelesen habe, würde ich folgendes erwarten:

Wenn Sie versuchen, foo zu machen, ohne einen Wert für das Eingabefeld anzugeben, wird die Aktion nie ausgeführt, da währendprocessValidationsPhase Ein Fehler führt dazu, dass die Seite direkt nach dieser Phase mit einer Fehlermeldung neu gerendert wird. Der Wert derdidSomething bleibt unverändert. (Dies funktioniert wie erwartet)

Wenn Sie versuchen, bar auszuführen, ohne einen Wert für das Eingabefeld anzugeben, wird die Aktion während ausgeführtapplyRequestValuesPhase wegen des unmittelbaren Attributs. Die VariabledidSomething ist geändert. (Dies funktioniert wie erwartet)

Auf was als nächstes passiert,diese Beschreibung Zustände:

"Ein Nullrückgabewert (als Ergebnis der Aktionsmethode) bewirkt, dass die Verarbeitung normal fortgesetzt wird, dh, nicht sofortige Komponenten werden validiert, und das Aktualisierungsmodell wird ausgeführt (wenn keine Validierungsfehler aufgetreten sind). Für eine Aktionslistener-Methode, die void zurückgibt, es ist notwendig facesContext.renderResponse () aufzurufen, wenn der normale Ablauf nicht gewünscht ist. "

Daraus ergab sich die Idee, dass die Verarbeitung normal fortgesetzt wird (da meine Aktionsmethode weder ein Ergebnis noch eine Kraft zurückgibtrenderResponse()), was zu demselben Validierungsfehler führt. Einziger Unterschied wäre, dass es auftrittnach dem RahmendidSomething. Dies ist jedoch nicht der Fall. Stattdessen scheint es, dass die Site weiterhin alle verbleibenden Phasen überspringt, ohne dass das Eingabefeld berührt wird. Es wird ohne Fehlermeldung neu gerendert.

Kann mir jemand erklären, wo mein Verständnis dafür, wie das funktioniert, nicht stimmt?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage