webentwicklung-frage-antwort-db.com.de

Festlegen der ausgewählten HTML-Dropdown-Option mithilfe von JSTL

Im gleichen Zusammenhang habe ich eine andere Frage

<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 anfrage 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 habe ich mehrere Auswahl Dropdown, obwohl ich den Rückgabewert von als zwei bekommen, in der Benutzeroberfläche wird nur eine Daten hervorgehoben, nicht die zweite. Was ist falsch im Code?

21
sarah

Angenommen, Sie haben eine Sammlung von $ {role} der Elemente, die in die Combo eingefügt werden sollen, und $ {selected} des ausgewählten Elements.

<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 der Ausdruckssprache ist es meiner Meinung nach am besten, 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>
29
Maurice Perry

In Servlet machen Sie:

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

Dann machen Sie in JSP:

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

Es wird das selected Attribut des HTML <option> Element, so dass Sie am Ende wie folgt aussehen:

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

Abgesehen von dem Problem: Dies ist nicht ein Kombinationsfeld. Dies ist ein Dropdown. Ein Kombinationsfeld ist eine bearbeitbare Dropdown-Liste.

10
BalusC

Ganz einfach. Sie müssen nur die Zeichenfolge "ausgewählt" zur richtigen Option hinzufügen. Im folgenden Code ist $ {myBean.foo == val? 'selected': ''} fügt die Zeichenfolge 'selected' hinzu, wenn der Wert der Option mit dem Bean-Wert übereinstimmt.

<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>
3
MattC