我知道,关于我的问题有无数的例子,但我经历了很多,但无法弄清楚我的错误在哪里。
我正在迭代 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>
但在任何一种情况下,它甚至都不会迭代列表,导致只有 1 个选项(列表包含 2 个元素)。
The <%=testszenario.getSzenariosForSummary() %>
会将对象转换为String
using String#valueOf(Object)
方法并将其直接写入 HTTP 响应。这不是你想要的。更重要的是,你应该not混合老派小脚本完全使用现代标签库/EL。
你需要确保testszenario
可供 EL 使用${}
。因此,只需在某些 servlet 中预先将其设置为页面、请求、会话或应用程序范围的属性,如下所示
request.setAttribute("testszenario", testszenario);
然后你就可以按照通常的方式访问它:
<c:forEach items="${testszenario.szenariosForSummary}" var="szenario">
也可以看看:
- 如何避免JSP文件中出现Java代码? https://stackoverflow.com/questions/3177733/how-to-avoid-java-code-in-jsp-files
-
我们的 Servlet wiki 页面 https://stackoverflow.com/tags/servlets/info- 你好世界 #2 可能对你有用
-
我们的 EL 维基页面 https://stackoverflow.com/tags/el/info
Update:至于 EL 不被解释的问题,显然 JSTL 和容器/之间不匹配web.xml
版本。确保版本正确对齐。例如。 Servlet 3.0容器,version="3.0"
in web.xml
,JSTL 1.2。另请参阅我们的 JSTL wiki 页面。
也可以看看:
-
我们的 JSTL 维基页面 https://stackoverflow.com/tags/jstl/info- 阅读“帮助!表达式语言(EL,那些
${}
东西)在我的 JSTL 标签中不起作用!”
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)