2012-01-13 51 views
0

我有2個從控制器servlet傳遞的arraylist:allOptionsListalreadySelectedOptionsList如何根據ArrayList設置<選擇選項>?

我試圖生成HTML形式<select>下拉列表,我想告訴從allOptionsList的所有項目中<select>一個<option>但是,我想對於那些在alreadySelectedOptionsList項目顯示爲<option selected="selected">

這是我已經有:

<select name="options" size="20"> 
    <c:forEach items="${allOptionsList}" var="optionAll"> 
     <option>${optionAll.optionName}</option> 
    </c:forEach> 
</select> 

Basicly我想要的選項,如果它已經在alreadySelectedOptionsList列表中進行選擇。我怎樣才能做到這一點?

回答

0

如果您要指定一個Servlet 3.0容器,它支持調用帶有參數(例如Tomcat的7,Glassfish的3等)方法的EL 2.2功能,那麼你可以使用List#contains()方法這個。

<select name="options" size="20"> 
    <c:forEach items="${allOptionsList}" var="optionAll"> 
     <option ${alreadySelectedOptionsList.contains(optionAll.optionName) ? 'selected' : ''}>${optionAll.optionName}</option> 
    </c:forEach> 
</select> 

但如果你的目標不支持EL調用方法較舊的容器,那麼你需要創建一個自定義EL函數做這項工作。你可以在這個答案中找到一個具體的例子:How can i do a multiselect in jsp/jstl with selected value?

+0

我的確做了類似於您所建議的內容,只是在java中因爲我使用了2.5容器。我創建了第三個包含boolen isSelected字段的對象。我比較了兩個列表中的對象和兩個列表中的對象,我將isSelected設置爲true。所有這些新對象都放在一個列表中,然後返回查看。它實際上是你正在消化的同樣的解決方案。 – aki 2012-01-14 11:51:47

0

使用c:if

<select name="options" size="20"> 
    <c:forEach items="${allOptionsList}" var="optionAll"> 
     <c:if test="${optionAll.selected == 'true'}"> 
      <option>${optionAll.optionName}</option> 
     </c:if> 
    </c:forEach> 
</select> 
+0

但我必須將它與alreadySelectedOptionsList進行比較,看它是否已被選中。如果它在alreadySelectedOptionsList中,它應該打印爲「

相關問題