【问题标题】:c:foreach returns only one empty valuec:foreach 只返回一个空值
【发布时间】:2012-01-18 00:10:46
【问题描述】:

我正在使用 JSF 2,并且出于某些目的需要 c:foreach。但无论我的列表有多大,c:foreach 只会循环一次,返回空值。我尝试了一切,我什至在单独的 .xhtml 中隔离了 c:foreach,但它仍然给出了相同的结果。如果您需要一些代码,请询问,但我想让 c:foreach 至少在单独的 .xhtml 中工作,而且我认为它也可以在我的代码中工作。

【问题讨论】:

    标签: jsf jsf-2 jstl


    【解决方案1】:

    在网络浏览器中打开页面,右键单击并查看源代码。你看到那里有<c:forEach> 标签plain vanilla,对吧?它根本没有被解析和执行吗?这个不对。您需要确保已在 XML 名称空间中声明了 JSTL 核心标记库,以便让 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?

    【讨论】:

    • 感谢您的回答。是的,你是对的——当我打开源代码时,我看到了 foreach 标签。我这样声明jstl:xmlns:c =“java.sun.com/jstl/core”,所以我尝试像你说的那样放置“java.sun.com/jsp/jstl/core”并将jstl jar添加到我的服务器的lib文件夹中 - 我使用tomcat 7(它已经在我的应用程序的库),但它没有用。我收到错误: 标记库支持命名空间:java.sun.com/jsp/jstl/core,但没有为名称定义标记:foreach javax.faces.webapp.FacesServlet.service(FacesServlet.java:205)
    • 与 Java 中的其他所有内容一样,<c:forEach> 标记名称区分大小写。
    • 我能再问你一件事吗,因为我看到你在这方面做得很好。如果您能再次帮助我,我将不胜感激。所以,我有 a4j:jsFunction 来改变 bean 的数组内容,然后重新渲染放置 forEach 的元素,现在 forEach 的行为很奇怪:如果我删除了该数组的一个元素,它将为该元素输出空值,如果我添加元素它将输出除新的以外的所有内容。所以它似乎知道数组的先前大小或类似的东西。我需要的是 jsFunction 在 forEach 之前完全执行。有可能吗?
    猜你喜欢
    • 2018-12-30
    • 1970-01-01
    • 1970-01-01
    • 2020-09-03
    • 1970-01-01
    • 2019-03-22
    • 2014-10-18
    • 2018-05-14
    相关资源
    最近更新 更多