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

我一直在努力find我的代码中的问题,我只是没有看到它。

在我的servlet中,我创build了一个国家列表并将其设置为我的请求:

List<Country> countryList = (new CountryListForm(countryDAO)).getList(); request.setAttribute(ATTRIBUTE_COUNTRY_LIST, countryList); 

当我debugging我的servlet时,我看到国家列表被创build并放入请求。

接下来,在我的JSP中,我得到国家名单,遍历它,并显示在下拉列表中的值:

  <select id="clubCountryId" name="clubCountryId"> <c:forEach var="country" items="${countryList}"> <option value="${country.id}"> ${fn:escapeXml(country.name)} </option> </c:forEach> </select> 

当我debugging这个,我可以看到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> 

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

有没有人有什么build议?

提前致谢!

JSTL标签出现在HTML源代码中,这是不对的。 它应该在服务器端运行,并在HTML输出中完全消失。 如果您没有在JSP之前声明taglib,就会发生这种情况。 将以下行添加到JSP的顶部,以运行JSTL核心标记:

 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 

如果这反过来导致对服务器日志中缺lessTLD URI的投诉,那么您需要确保已经安装了JSTL 。 也许你正在运行一个不包含JSTL内置的容器,比如Tomcat或者Jetty。