JSF 1.2 和 JSF 2.x 之间的 JSTL xmlns 命名空间差异?

Posted

技术标签:

【中文标题】JSF 1.2 和 JSF 2.x 之间的 JSTL xmlns 命名空间差异?【英文标题】:JSTL xmlns namespace differences between JSF 1.2 and JSF 2.x? 【发布时间】: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 中)?两者有什么区别?

【问题讨论】:

【参考方案1】:

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

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。

以上是关于JSF 1.2 和 JSF 2.x 之间的 JSTL xmlns 命名空间差异?的主要内容,如果未能解决你的问题,请参考以下文章

JSF 中的值转换究竟是啥时候发生的?

在 JSF 1.2 中使用 Mojarra 配置 JSF 视图状态加密

在同一个 Tomcat 服务器上部署 JSF 1.2 和 JSF 2.0 应用程序

JSF-2.3 找不到我的 @Named CDI-1.2 托管 bean

从 JSF 1.2 迁移到 JSF 2.0 后,每次导航都出现 ViewExpiredException

JBoss 6 上的 JSF 1.2 和 EL 表达式未解决