Versuchen zu verstehen, sofort = "wahre" Überspringen von Eingaben, wenn es nicht sollte

Gerade als ich dachte, hatte ich 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 diesen backing-bean:

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

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

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

Vom alle habe ich gelesen, sofort würde ich erwarten, dass die folgenden:

  • Wenn Sie versuchen zu tun foo, bieten aber keine einen Wert für das Eingabefeld, wird die Aktion nie ausgeführt, weil während processValidationsPhase tritt ein Fehler auf, wodurch die Seite neu gerendert, direkt nach dieser phase mit einer Fehlermeldung. Der Wert der didSomething bleibt unverändert. (Dies funktioniert wie erwartet)
  • Wenn Sie versuchen zu tun-bar, während die Bereitstellung nicht ein Wert für das Eingabefeld, wird die Aktion ausgeführt, während applyRequestValuesPhase wegen der unmittelbaren Attribut. Die variable didSomething geändert wird. (Dies funktioniert wie erwartet)

Auf, was als Nächstes passiert, diese Beschreibung Staaten:

"Ein null-Wert zurück (als Ergebnisse der action-Methode) bewirkt die Verarbeitung weiter zu als normale, sprich nicht-unmittelbaren Komponenten sind validiert, dann update-Modell ausgeführt wird (wenn keine Validierung Fehler aufgetreten sind). Für einen action-listener-Methode, die void zurückgibt, ist es notwendig, rufen facesContext.renderResponse(); wenn der normale Fluss ist nicht erwünscht."

Aus dieser hatte ich die Idee, dass die Verarbeitung wird normal fortgesetzt. (wie meine action Methode weder zurück, ein Ergebnis noch Kraft renderResponse()), was den gleichen Fehler bei der überprüfung. Einzige Unterschied wäre, dass es vorkommt nach Einstellung didSomething. Allerdings bedeutet dies nicht passieren. Stattdessen fühlt es sich wie die Seite noch überspringt alle restlichen Phasen mit dem input-Feld nicht berührt werden. Es neu gerendert, ohne Fehlermeldung.

Kann mir jemand erklären, wo mein Verständnis von, wie dieses arbeitet nicht in Ordnung ist?

InformationsquelleAutor der Frage Louise | 2012-10-18

Schreibe einen Kommentar