【问题标题】:JSTL xmlns namespace differences between JSF 1.2 and JSF 2.x?JSF 1.2 和 JSF 2.x 之间的 JSTL xmlns 命名空间差异?
【发布时间】:2011-11-27 11:03:03
【问题描述】:

我有一个基于 JSF 1.2 的 web 应用程序,我从中复制了 JSTL 导入

xmlns:c="http://java.sun.com/jstl/core"

您还可以在 Internet 上的许多地方找到此导入。我不记得以上内容是否适用于我以前的 Web 项目,无论如何,它在我当前基于 JSF 2.0 的 web 应用程序中确实工作。我收到了来自容器的警告:

警告:此页面调用以前缀 c 声明的 XML 命名空间 http://java.sun.com/jstl/core,但该命名空间不存在标记库。

然后我将导入更改为

xmlns:c="http://java.sun.com/jsp/jstl/core"

...在基于 JSF/RichFaces 的 web 应用程序中使用 <c:forEach> 消除了所有令人头疼的问题。

这里有什么诀窍?从 JSF 1.2 到 2.x 的 JSTL 导入 URL 是否有任何更改?还是前一行通常是错误的(在 JSF 中)?两者有什么区别?

【问题讨论】:

    标签: jsf import jsf-2 jstl xml-namespaces


    【解决方案1】:

    查看我们的 JSTL wiki 页面:https://stackoverflow.com/tags/jstl/info 标记悬停在您的问题下方,直到弹出一个黑框,然后单击信息 链接,您都可以获得此类页面。

    Facelets 1.x 和 2.x 确实为 JSTL 标记库使用了不同的命名空间。它在 Facelets 1.x 中或多或少是一个命名空间 bug,并已针对 Facelets 2.x 进行了修复。

    • 真正的 JSTL 1.0 标签库使用 URI http://java.sun.com/jstl/core
    • 真正的 JSTL 1.1/1.2 标签库使用 URI http://java.sun.com/jsp/jstl/core
    • Facelets 1.x 使用 URI http://java.sun.com/jstl/core
    • Facelets 2.x 使用 URI http://java.sun.com/jsp/jstl/core
    • Facelets 2.2+ 使用 URI http://xmlns.jcp.org/jsp/jstl/core

    您可以在Facelets tag library documentation 中找到所有 Facelets 2.x 标记。 Facelets 不附带完整的标签集real JSTL taglib。只有少数<c:xxx> 和完整的<fn:xxx> 被复制到Facelets 中。 <fmt:xxx><sql:xxx><xml:xxx> 标签不会在 Facelets 中被接管。

    【讨论】:

    • Facelets 2.2+ 命名空间 URI 是 http://xmlns.jcp.org/jsp/jstl/core(只需按照 BalusC 描述的 JSTL 标签信息)
    【解决方案2】:

    JSTL 现在是 EL 的一部分。
    它不依赖于 JSF 实现,而是依赖于您的 servlet 容器所兼容的 servlet 版本。
    因此,它们必须在不同的服务器或同一服务器的不同版本上运行。


    简短的回答是从 2.4 开始,jboss 7 是。
    如果您通过 JSTL 文档 here 您会找到任何方法。
    其他方面很好link.
    还有一个来自 BalusC 的 here

    【讨论】:

    • 如何找出哪个服务器使用了哪个命名空间?我目前正在使用 JBoss AS 7。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-05
    • 1970-01-01
    • 2013-12-11
    • 2011-08-08
    • 2013-03-08
    相关资源
    最近更新 更多