# JSTL <c:choose>?



## SnooP (12. Feb 2007)

Moin... - ich werd grad wahnsinnig 

Ich will bei der Darstellung eines <select> Ein Element meiner Liste als "Default"-Element verwenden und hab an selected="selected" gedacht für das option-tag.

Kurz gesagt geht's um die Anzeige von Details eines Mitarbeiters, der einer bestimmten Firma angehört... alle möglichen Firmen werden in dieser select-Liste angezeigt und die aktuelle Firma zu der der MA gehört, soll natürlich die standardmäßig ausgewählt sein... - so weit so gut, hab ich gedacht ich mach das mit <c:choose>:


```
<select multiple="multiple" name="corp" >
                    <c:forEach var="opt" items="${Corporations.corporations}">
                        <c:out value="${opt.name == corp}" /> 
                        <c:choose>
                            <c:when test="${opt.name == corp} ">
                                <option selected="selected"><c:out value="${opt}" /></option>
                            </c:when>
                            <c:otherwise>
                                <option><c:out value="${opt}" /></option>
                            </c:otherwise>
                        </c:choose>
                    </c:forEach>
                </select>
```

Also wenn opt.name == corp gilt (er nimmt da implizit equals), soll er die option mit selected ausgeben, sonst nicht. Opt ist eine Corporation die ein entsprechendes Attribut name hat und corp ist das Attribut mit dem String der die aktuelle Corporation beinhaltet des Users... - beide Variablen haben die gewünschten Inhalte und die Ausgabe oben (opt.name == corp) ergibt richtig einmal true und einmal false bei zwei Firmen in der Liste. Aaaber! und das ist das Merkwürdige - er geht in den when-Fall nicht rein, wie man mit nem Debugger eindeutig erkennen kann... - er geht immer ins otherwise!

Was mach ich also falsch - ist das sowieso Grütze?  - kann man das besser lösen?


----------



## SnooP (12. Feb 2007)

Soo... habs leider nicht wirklich auflösen können das Problem - hatte auch irgendwie Probleme mit der Bean die lediglich ne Collection gehalten hat mit sämtlichen Corporations... sprich Corporations.corporations fand er irgendwie nich so gut...

Hab jetzt <html:select> und <options collection="..."> benutzt und die collection direkt als Sessionvariable gespeichert... - damit funktionierte alles prächtig... - aber was mit der EL da los war, keine Ahnung  - hat da jemand Erfahrung? - selbst nen <c:when test="true"> hat nämlich nich wirklich gewirkt... - ganz seltsam!


----------



## Ralf Ueberfuhr (13. Feb 2007)

Also == impliziert nicht automatisch equals. Nimm stattdessen


```
<c:when test="${opt.name eq corp} ">
  <option selected="selected"><c:out value="${opt}" /></option>
</c:when>
```


----------



## SnooP (13. Feb 2007)

Laut Spez. ist eq gemapped auf ==

und es geht ja auch


----------

