2012-01-13 83 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中,它应该打印为“

相关问题