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

23

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

xmlns:c="http://java.sun.com/jstl/core"
您还可以在许多互联网场所找到这个导入。我不记得上述内容是否适用于我的旧网络项目,但无论如何,在我的当前基于JSF 2.0的Web应用程序中它都不起作用。容器给出了一个警告:

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

然后我将导入更改为

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

... 这个方法解决了在基于JSF/RichFaces的web应用中使用时的所有问题。

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

2个回答

46

请查看我们的JSTL维基页面:https://stackoverflow.com/tags/jstl/info。每当您在问题下方悬停标记时,都可以获得这种页面,直到出现黑框,然后点击info链接。

确实,Facelets 1.x和2.x对JSTL标签库使用不同的命名空间。这在Facelets 1.x中或多或少是一个命名空间bug,并已经在Facelets 2.x中修复。

  • 真正的JSTL 1.0标签库使用URIhttp://java.sun.com/jstl/core
  • 真正的JSTL 1.1/1.2标签库使用URIhttp://java.sun.com/jsp/jstl/core
  • Facelets 1.x使用URIhttp://java.sun.com/jstl/core
  • Facelets 2.x使用URIhttp://java.sun.com/jsp/jstl/core
  • Facelets 2.2+使用URIhttp://xmlns.jcp.org/jsp/jstl/core
您可以在Facelets标签库文档中找到所有的Facelets 2.x标签。Facelets不会像真正的JSTL标签库一样提供完整的标签集合。只有一些<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 标签信息进行操作)。 - Kawu

3

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


简短的答案是从2.4版本开始,而jboss 7就是这个版本。
如果您查看JSTL文档此处,您将发现任何方法。
否则,这里有一个很好的链接
还有一个来自BalusC的链接


我该如何找出哪个服务器使用了哪些命名空间?我目前正在使用 JBoss AS 7。 - Kawu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接