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?
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>
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.
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>