2010-04-21 5 views
17

Im gleichen Zusammenhang habe ich eine andere AbfrageSet HTML Dropdown ausgewählte Option JSTL mit

<select multiple="multiple" name="prodSKUs"> 
      <c:forEach items="${productSubCategoryList}" var="productSubCategoryList"> 
      <option value="${productSubCategoryList}"${productSubCategoryList == productSubCategoryName ? 'selected' : ''}>${productSubCategoryList}</option> 
     </c:forEach> 
     </select> 

und die entsprechende Einstellung in Anforderung ist wie

for(int i=0;i<userProductData.size();i++){ 
    String productSubCategoryName=userProductData.get(i).getProductSubCategory(); 
    System.out.println(productSubCategoryName); 
    request.setAttribute("productSubCategoryName",productSubCategoryName); 

} 

hier i unten mehrere Auswahl Tropfen haben, obwohl Ich bekomme den Rückgabewert von für wie zwei, in der UI werden nur eine Daten hervorgehoben, nicht die zweite. Was ist falsch im Code?

Antwort

25

Unter der Annahme, dass Sie eine Sammlung $ haben {Rollen} der Elemente in der Combo zu setzen, und $ {ausgewählt} das ausgewählte Element, es würde so gehen:

<select name='role'> 
    <option value="${selected}" selected>${selected}</option> 
    <c:forEach items="${roles}" var="role"> 
     <c:if test="${role != selected}"> 
      <option value="${role}">${role}</option> 
     </c:if> 
    </c:forEach> 
</select> 

UPDATE (nächste Frage)

Sie überschreiben das Attribut "productSubCategoryName". Am Ende der for-Schleife der letzte productSubCategoryName.

Aufgrund der Einschränkungen des Ausdruckssprache, ich glaube, der beste Weg, damit umzugehen ist, eine Karte zu verwenden:

Map<String,Boolean> map = new HashMap<String,Boolean>(); 
for(int i=0;i<userProductData.size();i++){ 
    String productSubCategoryName=userProductData.get(i).getProductSubCategory(); 
    System.out.println(productSubCategoryName); 
    map.put(productSubCategoryName, true); 
} 
request.setAttribute("productSubCategoryMap", map); 

Und dann in der JSP:

<select multiple="multiple" name="prodSKUs"> 
    <c:forEach items="${productSubCategoryList}" var="productSubCategoryList"> 
     <option value="${productSubCategoryList}" ${not empty productSubCategoryMap[productSubCategoryList] ? 'selected' : ''}>${productSubCategoryList}</option> 
    </c:forEach> 
</select> 
+0

Es wird nur aus der Bestellung sein. – BalusC

+0

Bitte antworten Sie auf meine editierten Nachricht – sarah

+0

@BalusC: ja das ist, was, @sarah gefragt wurde: meine Antwort auf die nächste Frage ist bereit –

9

In Servlets tun:

String selectedRole = "rat"; // Or "cat" or whatever you'd like. 
request.setAttribute("selectedRole", selectedRole); 

dann in JSP zu tun:

<select name="roleName"> 
    <c:forEach items="${roleNames}" var="role"> 
     <option value="${role}" ${role == selectedRole ? 'selected' : ''}>${role}</option> 
    </c:forEach> 
</select> 

Es druckt das selected Attribut des Elements HTML <option> so dass Sie sich wie am Ende:

<select name="roleName"> 
    <option value="cat">cat</option> 
    <option value="rat" selected>rat</option> 
    <option value="unicorn">unicorn</option> 
</select> 

Neben dem Problem: Das ist nicht ein Kombinationsfeld. Dies ist ein Dropdown. Ein Kombinationsfeld ist ein editierbares Dropdown-Menü.

+0

Was wäre, wenn das select mit dem Attribut "multiple" versehen wäre und mehr als eine ausgewählte Rolle hätte? –

+0

@stunaz: Ich habe dies bereits in Ihrer eigenen Frage beantwortet: http://stackoverflow.com/questions/4059922/how-can-i-do-a-multiselect-in-jsp-jstl-with-selected-value – BalusC

+1

+1, stolperte über diese Suche nach einer prägnanten Version von ausgewählt = "ausgewählt" '. –

2

Wirklich einfach. Sie müssen nur die Zeichenfolge "ausgewählt" zur richtigen Option hinzugefügt haben. Im folgenden Code $ {myBean.foo == val? 'selected': ''} fügt den String 'selected' hinzu, wenn der Wert der Option dem Bean-Wert entspricht;

<select name="foo" id="foo" value="${myBean.foo}"> 
    <option value="">ALL</option> 
    <c:forEach items="${fooList}" var="val"> 
     <option value="${val}" ${myBean.foo == val ? 'selected' : ' '}><c:out value="${val}" ></c:out></option> 
    </c:forEach>      
</select>