jsp - 使用 c :foreach (JSP/JSTL), 变量迭代 ArrayList 不起作用

标签 jsp arraylist foreach jstl loops

我知道,我的问题有无数的例子,但我经历了很多,无法弄清楚我的错误在哪里。

我正在迭代一个 ArrayList(TestSzenario)。 TestSzenario 类包含一个名为 name 的字符串变量,带有适当的 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>

我的问题是,变量不起作用。对于选择框中的每个选项,我总是得到 ${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>

编辑答案 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>

但在任何一种情况下,它甚至都不会遍历 List,导致只有 1 个选项(List 包含 2 个元素)。

最佳答案

<%=testszenario.getSzenariosForSummary() %>将对象转换为 String使用 String#valueOf(Object)方法并将其直接写入 HTTP 响应。这不是你想要的。更重要的是,您根本不应该将老式 scriptlets 与现代 taglibs/EL 混合在一起。

您需要确保 testszenario可用于 EL ${} .因此,只需在某些 servlet 中预先将其设置为页面、请求、 session 或应用程序范围的属性

request.setAttribute("testszenario", testszenario);

然后你就可以正常访问它了:

<c:forEach items="${testszenario.szenariosForSummary}" var="szenario"> 

另见:


更新:关于 EL 不被解释的问题,你显然是 JSTL 和 container/web.xml 不匹配。版本。确保版本正确对齐。例如。 Servlet 3.0 容器,version="3.0"web.xml ,JSTL 1.2。另请参阅我们的 JSTL wiki 页面。

另见:

  • Our JSTL wiki page - 阅读“帮助!表达式语言(EL,那些 ${} 的东西)在我的 JSTL 标记中不起作用!”部分!

关于jsp - 使用 c :foreach (JSP/JSTL), 变量迭代 ArrayList 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14625738/

相关文章:

java - Request.getattribute 在一个 Servlet 中工作,同时在其他 Servlet 中抛出空指针

java - 无法将 jquery ajax FormData 与 servlet 一起使用

java - 如何比较数组列表中的每个元素以找到两个数组中第 n 个最小的元素?

java - 使用 ArrayList 时出现越界错误

javascript - 如何将每一行元素转换为数组,以便我只能选择一个元素,如数据 [2]

java - 从 index.html 重定向时,重定向应该是另一个 HTML 还是 JSP 页面?

java - 在 JSP 中从字符串自动转换为日期

java - foreach 循环中的 ConcurrentModificationException

c# - 如果用户在hangman c#中猜测正确,如何显示用户的输入

vba - For Each Next 循环意外地跳过一些条目