olk*_*oza 3 foreach jsp loops jstl arraylist
我知道,我的问题有无数的例子,但是我经历了很多,无法弄清楚我的错误在哪里.
我正在迭代一个ArrayList(TestSzenario).TestSzenario类包含一个名为name的String Variable,带有正确的getter和setter.
这是我的代码:
<td><select name="selectSzenario" id="selectSzenario" size="1">
<c:forEach items="<%=testszenario.getSzenariosForSummary() %>" var="szenario">
<option>${szenario.name}</option>
</c:forEach></select></td></tr>
Run Code Online (Sandbox Code Playgroud)
我的问题是,变量不起作用.对于选择框中的每个选项,我都得到$ {szenario.name}.我正确地声明了JSTL-taglib,因为在完成后网站中有多个选项,我知道迭代正在运行.我还在HTML源代码中查看了foreach的解决方法.
HTML的输出:
<tr><td>Szenario:</td>
<td><select name="selectSzenario" id="selectSzenario" size="1">
<option>${szenario.name}</option>
<option>${szenario.name}</option>
</select></td></tr>
Run Code Online (Sandbox Code Playgroud)
编辑回答1:谢谢,但我之前尝试过:
ArrayList<TestSzenario> szenarioList = testszenario.getSzenariosForSummary();
request.setAttribute("aList", szenarioList);
request.setAttribute("ts", testszenario);
<c:forEach items="${aList}" var="szenario">
<option>${szenario.name}</option>
</c:forEach></select></td></tr>
<c:forEach items="${ts.szenariosForSummary}" var="szenario">
<option>${szenario.name}</option>
</c:forEach></select></td></tr>
Run Code Online (Sandbox Code Playgroud)
但在任何一种情况下,它甚至都不会遍历List,导致只有1个选项(List包含2个元素).
在<%=testszenario.getSzenariosForSummary() %>将对象转换为String使用String#valueOf(Object)方法,它直写入HTTP响应.这不是你想要的.更重要的是,你不应该将oldschool scriptlet与现代taglibs/EL 混合使用.
您需要确保testszenarioEL可以使用${}.因此,只需在某些servlet中将其设置为页面,请求,会话或应用程序范围的属性,如此
request.setAttribute("testszenario", testszenario);
Run Code Online (Sandbox Code Playgroud)
然后你可以通常的方式访问它:
<c:forEach items="${testszenario.szenariosForSummary}" var="szenario">
Run Code Online (Sandbox Code Playgroud)
更新:关于EL没有被解释的问题,你显然是JSTL和容器/ web.xml版本之间的不匹配.确保版本正确对齐.例如,Servlet 3.0容器,version="3.0"在web.xml,JSTL 1.2.另请参阅我们的JSTL维基页面.
${}东西)在我的JSTL标签中不起作用!"