使用c:foreach(JSP/JSTL)在ArrayList上迭代,变量不';行不通
对于我的问题,我知道有无数的例子,但我经历了很多,无法找出我的错误在哪里 我正在迭代一个ArrayList(TestSzenario)。类TestSzenario包含一个名为name的字符串变量,该变量带有正确的getter和setter 这是我的密码:使用c:foreach(JSP/JSTL)在ArrayList上迭代,变量不';行不通,jsp,arraylist,foreach,jstl,loops,Jsp,Arraylist,Foreach,Jstl,Loops,对于我的问题,我知道有无数的例子,但我经历了很多,无法找出我的错误在哪里 我正在迭代一个ArrayList(TestSzenario)。类TestSzenario包含一个名为name的字符串变量,该变量带有正确的getter和setter 这是我的密码: <td><select name="selectSzenario" id="selectSzenario" size="1"> <c:forEach items="<%=tes
<td><select name="selectSzenario" id="selectSzenario" size="1">
<c:forEach items="<%=testszenario.getSzenariosForSummary() %>" var="szenario">
<option>${szenario.name}</option>
</c:forEach></select></td></tr>
${szenario.name}
我的问题是,变量不起作用。对于选择框中的每个选项,我都会得到${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>
Szenario:
${szenario.name}
${szenario.name}
编辑答案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>
ArrayList szenarioList=testszenario.getSzenariosForSummary();
setAttribute(“aList”,szenarioList);
setAttribute(“ts”,testszenario);
${szenario.name}
${szenario.name}
但在任何一种情况下,它都不会遍历列表,只会产生一个选项(列表包含2个元素)。使用String\valueOf(object)
方法将对象转换为String
,并将其直接写入HTTP响应。这不是你想要的。更重要的是,你不应该把老式的脚本和现代的taglibs/EL混为一谈
您需要确保EL${}
可以使用testszenario
。所以,只需在类似这样的servlet中预先将其设置为页面、请求、会话或应用程序范围的属性
request.setAttribute("testszenario", testszenario);
然后,您可以按常规方式访问它:
<c:forEach items="${testszenario.szenariosForSummary}" var="szenario">
另见:
- -你好,世界2号可能对你有用
更新:至于EL不被解释的问题,显然JSTL和container/
web.xml
版本不匹配。确保版本正确对齐。例如,Servlet 3.0容器,version=“3.0”
中的web.xml
,JSTL 1.2。另请参见我们的JSTL wiki页面
另见:
- -阅读“帮助!表达式语言(EL,那些
东西)在我的JSTL标记中不起作用!”${}
部分不适用于JSTL标记之外的scriptlet吗?看到和