JSTL c:JSP页面上的forEach不起作用

时间:2011-07-17 13:45:18

标签: jsp loops collections foreach jstl

我一直在努力在我的代码中找到问题,而我却没有看到它。

在我的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>

正如您所看到的,我的五个对象存在,但它只是不想迭代它们。我有其他页面,我基本上做同样的事情(国家列表,但没有在下拉列表中),我没有问题。

有人有任何建议吗?

提前致谢!

1 个答案:

答案 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。