我正在使用JSF 2,我需要c:foreach用于某些目的。但无论我的列表有多大,c:foreach只循环一次,返回空值。我尝试了一切,我甚至在单独的.xhtml中分离了c:foreach,但它仍然给出了相同的结果。如果您需要一些代码,请询问,但我想使c:foreach至少在单独的.xhtml中工作,并且我会说它比在我的代码中也能工作。
答案 0 :(得分:5)
在Web浏览器中打开页面,右键单击查看源。你在那里看到<c:forEach>
标签普通香草,对吗?它根本没有被解析和执行?这个不对。您需要确保在XML命名空间中声明了JSTL核心taglib,以便Facelets对其进行解析和执行。正确的XML名称空间声明如下:
xmlns:c="http://java.sun.com/jsp/jstl/core"
如果您已经完成了,那么它只能意味着您在没有预安装JSTL的服务器上运行webapp。像Glassfish和JBoss AS这样的完整Java EE应用程序服务器已经捆绑了JSTL,但是像Tomcat和Jetty这样的简单servlet容器却没有。您需要下载并将JSTL库放在webapp的/WEB-INF/lib
中,或者甚至可以放在服务器自己的/lib
文件夹中。
无关,您是否清楚<c:forEach>
是视图构建时标记,而不是视图渲染时间标记?如果您实际上正在寻找后者,那么您应该使用Facelets自己的<ui:repeat>
标签。另请参阅JSTL in JSF2 Facelets... makes sense?