JSF: Wechsel bei SelectOneListBox verhindern
Helmut
- java
0 Helmut
Hallo,
meine Seite wird mittels JSF generiert.
Es gibt auch eine Form mit mehreren Eingaben. Darunter auch eine SelectOneListBox.
Wenn man in dieser ListBox einen anderen Eintrag anklickt werden per AJAX die momentanen Werte der Form an den Server übertragen und mit einem anderen Eintrag vertauscht.
Natürlich müssen dabei die aktuell eingegebenen Werte korregt sein, das heißt kein Validierer und kein Converter (es ist ein Datum dabei) darf Fehlschlagen. Ist dies der Fall, soll die alte Auswahl der ListBox mitsamt den eingegebenen Werten bleiben.
Soweit funktioniert es auch (bis auf das, dass in dem <h:messages showDetail="true" showSummary="false" /> nur eine Fehlermeldung bei einem Validierer-Error kommt aber nicht wenn ein Konvertierer fehlschlägt).
Ein Problem habe ich allerdings:
Die Auswahl in der SelectOneListBox bleibt auf der neu angeklickten Auswahl und springt wegen des Fehlers nicht zurück.
addOnError wird nicht ausgerufen und bei addOnEvent bekomme ich success wie immer, so dass ich dort nicht sagen kann: Alte Anwahl wieder herstellen.
Habe jetzt der SelectOneListBox ein valueChangeListener mitgegeben, der auch bei einem Validierer-Fehler aufgerufen wird. Habe ich im Moment so probiert (Namen sind nur für das Beispiel so):
public void dieFunktion(ValueChangeEvent event)
{
if(FacesContext.getCurrentInstance().isValidationFailed())
derAktuelleWertDerListBox = (Integer)event.getOldValue();
}
Anwahl bleibt trotzdem bei dem neuen Wert (der eigentlich ungültig ist).
Mein SelectOneListBox sieht so aus:
<h:selectOneListbox id="neId" value="#{dieBean.derAktuelleWertDerListBox }" valueChangeListener="#{dieBean.dieFunktion}" size="5">
<f:selectItems value="#{dieBean.dieZeilen}"/>
<f:ajax execute="@form" render="@form"/>
</h:selectOneListbox>
Weiß wer, wie ich dieses Problem lösen kann?
Danke
hm, hat keiner eine Idee?