使用c:foreach(JSP/JSTL)在ArrayList上迭代,变量不';行不通

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

对于我的问题,我知道有无数的例子,但我经历了很多,无法找出我的错误在哪里

我正在迭代一个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}
我的问题是,变量不起作用。对于选择框中的每个选项,我都会得到${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标记中不起作用!”

你是对的,web.xml中没有完整的声明。我没有通读JSTL维基。非常感谢,先生@BalusC,关于将对象转换为字符串并将其打印到HTTP响应的
部分不适用于JSTL标记之外的scriptlet吗?看到和