# JSF: selectOneListbox Bug?



## daywalkertp (3. September 2007)

Hallo Freunde,

ich arbeite seit kurzer Zeit mit Java Server Faces und habe schon einen Fehler entdeckt:

=== test.jsp (JSF Seite) ===

```
...
<f:view>
    <h:form>
        <h:selectOneListbox id="test123" value="#{bean.currentItem}" immediate="true">
            <f:selectItems value="#{bean.allItems}" />
        </h:selectOneListbox>
        <h:commandButton value="Klick mich!" action="#{bean.displayCurrentItem}" />
    </h:form>
</f:view> ...
```

=== Bean.java ===

```
public class Bean{
    private SelectItem currentItem;
    private List<SelectItem> allItems;

    public Bean() {        
        allItems = new ArrayList<SelectItem>();
        allItems.add(new SelectItem("Wert 1", "Label 1"));
        allItems.add(new SelectItem("Wert 2", "Label 2"));
        allItems.add(new SelectItem("Wert 3", "Label 3"));
    }

    public String displayCurrentItem(){
        String s = (currentItem != null)?getCurrentItem().getValue().toString():"NULL";
        System.out.println("DA: " + s);
        return null;
    }

    public SelectItem getCurrentItem() {
        return currentItem;
    }

    public void setCurrentItem(SelectItem currentItem) {
        this.currentItem = currentItem;
    }

    public List<SelectItem> getAllItems() {
        return allItems;
    }

    public void setAllItems(List<SelectItem> allItems) {
        this.allItems = allItems;
    }
}
```

und nun zum lustigen Teil:

Wenn ich die Seite lade, kein Item markiere und dann auf den Submit-Button klicke, erfolgt die Ausgabe in der (JBoss- )Console.
Wenn ich aber ein Item aus der SelectBox markiere und dann anschließend auf den Submit-Button klicke, wird nichts ausgegeben. Fast so als ob er nichtmal die Actionmethode aufrufen würde. Wisst ihr was da sein kann?

Ist das ein Bug oder mach ich was falsch?

Danke im Voraus!


----------



## limago (4. September 2007)

Hi,


Dieser Effekt tritt offensichtlich dann auf, wenn "bean.currentItem" nicht vom Typ "String" ist. Mir ist dass auch schon passiert. Ich habe an mein SelectItem ein Object und ein Label (String) übergeben. Ich habe erwartet, dass in "bean.currentItem" das Object (nicht SelectItem) abgelegt wird. Es trat aber nur der von Dir beschriebene Effekt auf. 

Mein Workaround besteht darin, nicht Object und String in das SelectItem zu schreiben, sondern zwei Strings (id des Objects undLabel). "bean.currentItem" ist vom Typ String. Dann funktioniert es. Der Value-String aus dem SelectItem wird im Value-Attribut des SelectOneMenu abgelegt. Ich muss jetzt nur umständlich aus der Id String) wieder das Object ermitteln :-(. Da Du eh zwei Strings benutzt sollte das kein Thema sein.


Wenn Du einen Fix findest, wäre ich dankbar.

Grüße


----------

