我一直在努力在我的代码中找到问题,而我却没有看到它。
在我的servlet中,我创建了一个国家/地区列表并将其设置为我的请求:
List<Country> countryList = (new CountryListForm(countryDAO)).getList();
request.setAttribute(ATTRIBUTE_COUNTRY_LIST, countryList);
当我调试我的servlet时,我看到国家列表已创建并放入请求中。
接下来,在我的JSP中,我获取国家/地区列表,遍历它并在下拉列表中显示值:
<select id="clubCountryId" name="clubCountryId">
<c:forEach var="country" items="${countryList}">
<option value="${country.id}">
${fn:escapeXml(country.name)}
</option>
</c:forEach>
</select>
当我调试这个时,我可以看到countryList在我的请求中并且国家/地区存在。但是,我的下拉列表中没有任何内容。当我查看我的页面源(在Eclipse中)时,我看到以下内容:
<select id="clubCountryId" name="clubCountryId">
<c:forEach var="country" items="[eu.ctt.pojo.Country@c7057c, eu.ctt.pojo.Country@391da0, eu.ctt.pojo.Country@1c7f37d, eu.ctt.pojo.Country@42a6eb, eu.ctt.pojo.Country@1dcc4cd]">
<option value="">
</option>
</c:forEach>
</select>
正如您所看到的,我的五个对象存在,但它只是不想迭代它们。我有其他页面,我基本上做同样的事情(国家列表,但没有在下拉列表中),我没有问题。
有人有任何建议吗?
提前致谢!
答案 0 :(得分:4)
JSTL标记出现在HTML源代码中,这是不对的。它应该在服务器端运行,并在HTML输出中完全消失。如果您没有在JSP顶部声明taglib,就会发生这种情况。将以下行添加到JSP的顶部以获取要运行的JSTL核心标记:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
如果这反过来导致服务器日志中缺少TLD URI的投诉,那么您需要确保已安装JSTL。也许你正在运行一个没有内置JSTL的容器,比如Tomcat或Jetty。