2010-04-21 44 views
17

Trong bối cảnh tương tự tôi có một truy vấnĐặt HTML thả xuống chọn tùy chọn sử dụng JSTL

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

và các thiết lập tương ứng trong yêu cầu là như

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

} 

đây tôi có nhiều lựa chọn thả xuống, mặc dù tôi nhận được giá trị trả về từ cho hai, trong giao diện người dùng chỉ có một dữ liệu là nhận được higlighted không phải là thứ hai, Có gì sai trong mã?

Trả lời

25

Giả sử rằng bạn có một bộ sưu tập $ {vai trò} trong những yếu tố để đưa vào combo, và $ {chọn} thành phần được chọn, nó sẽ đi như thế này:

<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 (câu hỏi tiếp theo)

Bạn đang ghi đè thuộc tính "productSubCategoryName". Vào cuối vòng lặp for, sản phẩm cuối cùngSubCategoryName.

Do những hạn chế của ngôn ngữ biểu hiện, tôi nghĩ rằng cách tốt nhất để đối phó với điều này là sử dụng một bản đồ:

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

Và sau đó trong 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

Nó sẽ không nằm ngoài thứ tự. – BalusC

+0

Vui lòng trả lời bài viết đã chỉnh sửa của tôi – sarah

+0

@BalusC: vâng, đó là những gì được yêu cầu, @sarah: câu trả lời của tôi cho câu hỏi tiếp theo của bạn đã sẵn sàng –

9

Trong Servlet làm:

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

Sau đó, trong JSP làm:

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

Nó sẽ in selected thuộc tính của phần tử HTML <option> để bạn kết thúc như:

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

Ngoài các vấn đề: đây là không một combo box. Đây là danh sách thả xuống. Hộp tổ hợp là một menu thả xuống có thể chỉnh sửa.

+0

điều gì sẽ xảy ra nếu lựa chọn là thuộc tính "nhiều" và chúng có thể có nhiều hơn một vai trò được chọn? –

+0

@stunaz: Tôi đã trả lời câu hỏi này theo câu hỏi của riêng bạn: http://stackoverflow.com/questions/4059922/how-can-i-do-a-multiselect-in-jsp-jstl-with-selected-value – BalusC

+1

+1, tình cờ tìm kiếm phiên bản ngắn gọn hơn của ' selected =" selected "'. –

2

Thật đơn giản. Bạn chỉ cần có chuỗi 'đã chọn' được thêm vào tùy chọn phù hợp. Trong đoạn mã sau, $ {myBean.foo == val? 'selected': ''} sẽ thêm chuỗi 'đã chọn' nếu giá trị của tùy chọn giống như giá trị 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> 
Các vấn đề liên quan