# Erlaubte Klassen für h:selectOneListbox Iteration?



## Zockrates (4. Sep 2009)

Hallo!

Ich bin langsam am verzweifeln... Ich möchte eigentlich nur für h:selectOneListbox über ein SelectItem[] oder eine HashMap<String,Object> iterieren, und den value (also das mit dem key verknüpfte object) speichern. Meine index.jsp sieht folgendermaßen aus:


```
<h:form>

<h:selectOneListbox value="#{input.selectedOption}" size="1">
   <f:selectItems value="#{input.options}"/>
</h:selectOneListbox>

<p><h:commandButton value="next" action="next" /></p>

</h:form>
```

Die input-Methoden sehen folgendermaßen aus:


```
public SelectItem[] getOptions() {
		return options;
	}
	public void setOptions(SelectItem[] options) {
		this.options = options;
	}
	public void setSelectedOption(InputOption selectedOption) {
		this.selectedOption = selectedOption;
	}
```

Die SelectItems bestehen jeweils aus einem label und einem InputOption-Objekt als value. (Ich habe das ganze auch mit einer HashMap<String,InputOption> versucht, es passiert genau das selbe).

Nun ist es so, dass die labels in der Listbox korrekt angezeit werden, die Form wird beim Drücken des buttons aber gar nicht erst submitted, der button klickt nur und die webseite bleibt statisch. Jetzt das kuriose: ändere ich die setSelectedOption-Methode so, dass sie statt InputOption einfach "Object" als parameter nimmt, funktioniert die Navigation einwandfrei, d.h. meinem bean wird wohl nicht wie gedacht ein InputOption-Objekt übergeben... lasse ich übrigens dann Object.toString() ausgeben, bekomme ich 
sowas wie "InputOption@26faf2", hm.

Kann es also sein, dass hier nur manche Objekte unterstützt werden, wie Strings und Integers? Laut CoreJSF sollte es mit allen funktionieren 

Verzweifelte Grüße,

Zockrates


----------



## Prismapanda (4. Sep 2009)

Es werden alle Objekte unterstützt, solange du jsf sagst, wie es das Objekt im Quelltext darstellen soll. Bei Strings und Integers ist das eindeutig, bei eigenen bzw. komplexen Objekten dagegen nicht.
Das ganze nennt sich dann Converter. Der Converter muss das gleichnamige Interface implementieren, dann in der faces-config eingebunden werden und kann dann mit dem <f:converter /> Tag in das selectOne Tag eingehängt werden.
Du musst halt bedenken, dass du nicht einfach beliebige Objekte in HTML pressen kannst. Eigentlich hätte es da ne Fehlermeldung geben müssen, allein dann wenn der submit Button nicht submitted. Welche JSF Implementierung benutzt du bzw. hast du Fehlermeldungen aufm Schirm? Die Objekte werden wohl deshalb richtig angezeigt, weil du  im SelectItem das Label richtig gesetzt hast. Nur ist der value halt "konvertierungsbedürftig"...


----------



## Zockrates (4. Sep 2009)

Danke für die schnelle Antwort!
Ich werde mir jetzt wohl das Kapitel über Custom Converters zu Gemüte führen, mal sehen ob ich es dann hinbekomme. Ich habe soeben gemerkt, dass ModellbahnerTT in seinem Thread "JSF selectOneMenu" das selbe Problem hat wie ich, die Antworten helfen mir bestimmt auch weiter. Ich melde mich wieder, wenn es (hoffentlich) funktioniert.

p.s. Ich verwende die neueste Eclipse Java EE IDE mit Glassfish... Fehlermeldungen habe ich eigentlich keine bekommen, ich wüsste prinzipiell auch gar nicht, wo ich diese nachzuschlagen hätte? in den log-Files?

thx,
Zockrates


----------

