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

时间:2011-09-29 07:01:03

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

我有一个基于JSF 1.2的webapp,我从中复制了JSTL导入

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

您还可以在Internet上的许多位置找到此导入。我不记得以上是否在我之前的网络项目中工作,无论如何,它在我当前基于JSF 2.0的webapp中工作。我收到集装箱的警告说:

  

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

然后我将导入更改为

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

...在基于JSF / RichFaces的webapp中使用<c:forEach>删除了所有令人头疼的问题。

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

2 个答案:

答案 0 :(得分:41)

查看我们的JSTL维基页面:https://stackoverflow.com/tags/jstl/info每当您将标记悬停在问题下方时,您都可以获得此类页面,直到弹出一个黑框,然后点击 info link。

Facelets 1.x和2.x确实为JSTL标记库使用了不同的名称空间。 Facelets 1.x中的名称空间bug更少或更多,并且已为Facelets 2.x修复。

  • 真正的JSTL 1.0 taglib使用URI http://java.sun.com/jstl/core
  • 真正的JSTL 1.1 / 1.2 taglib使用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中。 Facelets中不会接管<fmt:xxx><sql:xxx><xml:xxx>标记。

答案 1 :(得分:3)

JSTL现在是EL的一部分 它不依赖于JSF实现,而是取决于您的servlet容器符合的servlet版本。
因此,这些必须运行不同的服务器或同一服务器的不同版本。


简短回答是从1.4以上,jboss 7是 如果您通过JSTL文档here,您会发现任何方式 其他明智的是link。{ 另一个来自BalusC的here