HI,
Siehe den folgenden Code:
%Vor%Backing Bean
%Vor%Bitte lassen Sie mich wissen, ob die Implementierung korrekt ist. Es funktioniert gut. Meine Fragen sind:
ValueChangeListener
wird nur aufgerufen, wenn das Formular gesendet wird, nicht wenn der Wert der Eingabe geändert wird. Wenn Sie diesen Listener dann ausführen möchten, wenn der Wert geändert wird, haben Sie zwei Lösungen:
onchange
-Ereignis ausgelöst wird (das ist, was Sie in Ihrem Code getan haben); <f:ajax>
oder Bibliotheken von Drittanbietern wie Richfaces, Primefaces ...). Hier ist ein Beispiel mit Richfaces:
%Vor% In Bezug auf den Code Ihres Zuhörers scheint es richtig zu sein, aber warum ist Frage warum brauchen Sie hier einen ValueChangeListener ? In der Tat ist dieser Listener nützlich, wenn Sie eine Änderung eines Wertes verfolgen möchten. Deshalb stellt ValueChangeEvent
sowohl getOldValue()
als auch getNewValue()
Methoden zur Verfügung.
In deinem Code interessiert dich der alte Wert nicht, also könntest du "einfach" eine Aktion anstelle von valueChangeListener
(zB mit Richfaces) machen:
Schließlich besteht der Unterschied zwischen dem Attribut valueChangeListener
und <f:valueChangeListener>
darin, dass der erste eine Java-Methode ( #{myBean.myMethod}
) bindet, während der zweite eine Java-Klasse bindet ( type="com.foo.MyListenerClass"
), die ValueChangeListener
implementiert. Schnittstelle. Also könnte der zweite allgemeiner sein als der erste ...
Romaintaz hat bereits am meisten darauf hingewiesen, ich wollte nur direkt auf Ihre konkreten Fragen eingehen:
Was ist der Vorteil des Hinzufügens des Tags f: valueChangeListener im Tag h: selectOneMenu? Ich habe das normale Attribut valueChangeListener="# {countryBean.changeCountry}" verwendet.
Wie Romaintaz sagte, zeigt das Attribut auf eine Methode und das f:
-Tag verweist auf eine Klasse. Ein weiterer Vorteil ist, dass Sie mehrere von ihnen haben können, wann immer das notwendig ist.
Ist es notwendig, onchange="submit () diesen Code zu verwenden, um die Werte zu ändern.
Dass Javascript die Werte nicht ändert. Dadurch, dass Javascript das gesamte Formular absendet, ohne dass Sie den Senden-Button selbst drücken müssen, wenn der Wert vom Endbenutzer geändert wurde. Nein, das ist nicht nötig. Sie können es auch einfach entfernen und erwarten, dass der Endbenutzer die Übermittlungsschaltfläche selbst drückt. Noch einmal , dass JavaScript nicht Teil von JSF ist.
Was ist der Unterschied zwischen dem Schreiben der benutzerdefinierten Listener durch Implementieren der ActionListener-Schnittstelle und dem Verwenden des Attributs in den UIComponent-Tags (action="methodName").
Diese Frage wurde bereits zuvor gestellt: Unterschied zwischen Aktion und actionlistener .
Die Lösung von romaintaz, eine Aktion anstelle von valueChangeListener aufzurufen, ist auch großartig, weil die Aktion im Fall des "change" -Ereignisses aufgerufen wird, nachdem das Modell aktualisiert wurde (z. B. für eine Datenbankaktualisierung), während der valueChangeListener zuvor aufgerufen wird ....
Tags und Links jsf