Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsp 如何设置<;选择的选项>;基于ArrayList?_Jsp_Jstl_Html Lists_Html Select - Fatal编程技术网

Jsp 如何设置<;选择的选项>;基于ArrayList?

Jsp 如何设置<;选择的选项>;基于ArrayList?,jsp,jstl,html-lists,html-select,Jsp,Jstl,Html Lists,Html Select,我在JSP中有两个数组列表,它们是从控制器servlet传递的:allOptionsList和alreadySelectedOptionsList 我正在尝试使用下拉列表生成HTML表单,我想将AlloptionList中的所有项目显示为中的,但是,我想将中的项目显示为 这是我已经拥有的: <select name="options" size="20"> <c:forEach items="${allOptionsList}" var="optionAll">

我在JSP中有两个数组列表,它们是从控制器servlet传递的:
allOptionsList
alreadySelectedOptionsList

我正在尝试使用
下拉列表生成HTML表单,我想将
AlloptionList
中的所有项目显示为
中的
,但是,我想将
中的项目显示为

这是我已经拥有的:

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

${optionAll.optionName}
基本上,如果选项已在
alreadySelectedOptionsList
列表中,则我希望选择该选项。如何实现这一点?

使用
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>

${optionAll.optionName}

如果您的目标是一个Servlet 3.0容器,它支持使用参数调用方法的EL 2.2特性(例如Tomcat 7、Glassfish 3等),那么您可以使用
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>

${optionAll.optionName}

但是,如果您的目标是一个不支持在EL中调用方法的旧容器,那么您需要创建一个自定义EL函数来完成此任务。你可以在这个答案中找到一个具体的例子:

但我必须将它与AlreadySelectedOptions列表进行比较,看看它是否已经被选中。如果它在AlreadySelectedOptions列表中,那么它应该打印为“${optionAll.optionName}”,我确实做了一些与您建议的类似的事情,只是用java,因为我使用的是2.5容器。我创建了第三个对象,其中包含boolen isSelected字段。我比较了两个列表中的对象,对于两个列表中的对象,我将isSelected设置为true。所有这些新对象都放置在一个列表中,然后返回到视图。事实上,这和你提出的解决方案是一样的。