2010-04-21 5 views
17

В том же контексте я есть еще один запросSet HTML раскрывающийся выбран вариант с использованием JSTL

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

и соответствующая настройка в запросе, как

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

} 

здесь у меня есть несколько выберите падение вниз, несмотря на то, Я получаю возвращаемое значение из-за двух, в пользовательском интерфейсе только одна информация получает повышенную яркость, а не вторую, что не так в коде?

ответ

25

Если предположить, что у вас есть коллекция $ {ролей} элементов, чтобы положить в комбо, и $ {выбран} выбранный элемент, он бы так:

<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 (следующий вопрос)

Вы переписываете атрибут «productSubCategoryName». В конце цикла for - последний productSubCategoryName.

Из-за ограничений языка выражений, я думаю, что лучший способ справиться с этим, чтобы использовать карту:

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); 

, а затем в 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

Это будет только заказ. – BalusC

+0

Ответьте на мой отредактированный пост – sarah

+0

@BalusC: да, это то, о чем просили, @sarah: мой ответ на ваш следующий вопрос готов –

9

В Servlet делать:

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

Тогда в JSP сделать:

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

Он распечатывает атрибут элемента HTML <option>selected так, что вы в конечном итоге, как:

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

Помимо проблемы: это не поле со списком. Это выпадающее меню. Выпадающий список editable.

+0

что, если выбор был с атрибутом «multiple», и они могут быть более чем одной выбранной роли? –

+0

@stunaz: Я уже ответил на этот вопрос в вашем собственном вопросе: http://stackoverflow.com/questions/4059922/how-can-i-do-a-multiselect-in-jsp-jstl-with-selected-value – BalusC

+1

+1, наткнулся на это в поисках более сжатой версии ' selected =" selected "'. –

2

Реальный простой. Вам просто нужно добавить строку «selected» в нужную опцию. В следующем коде $ {myBean.foo == val? 'selected': ''} добавит строку 'selected', если значение параметра совпадает с значением bean;

<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> 
Смежные вопросы