我正在使用 JSF 2.0。我使用标记文件创建了自定义 JSTL 标记,并且在 JSP 中运行良好。但我也想在 Facelets 中使用自定义 JSTL 标记。是否可以在 Facelets 中创建标签文件?
问问题
6402 次
1 回答
17
“自定义 JSTL 标记”老实说毫无意义。这个词完全没有意义。JSTL 本身已经是一个标签库。请仔细阅读我们的 JSTL wiki 页面的介绍性段落,以了解 JSTL 的真正含义。您可能实际上是指“自定义 JSP 标记”。当然,它们不能在 Facelets 中工作,因为这是一种与 JSP 完全不同的视图技术,实际上是已弃用的 JSP 的继承者。
好吧,“自定义 JSP 标记”的类比是“自定义 Facelets 标记”,或者更常见的是“Facelets 标记文件”。它相当简单,您可以遵循与包含文件相同的语法。
/WEB-INF/tags/some.xhtml
:
<ui:composition xmlns:ui="http://java.sun.com/jsf/facelets">
Hello World
...
<ui:insert /> <!-- This inserts tag body, if necessary. -->
</ui:composition>
并将其注册/WEB-INF/example.taglib.xml
如下:
<?xml version="1.0" encoding="UTF-8"?>
<facelet-taglib
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facelettaglibrary_2_0.xsd"
version="2.0">
<namespace>http://example.com/jsf/facelets</namespace>
<tag>
<tag-name>some</tag-name>
<source>tags/some.xhtml</source>
</tag>
</facelet-taglib>
依次注册/WEB-INF/web.xml
如下:
<context-param>
<param-name>javax.faces.FACELETS_LIBRARIES</param-name>
<param-value>/WEB-INF/example.taglib.xml</param-value>
</context-param>
(请注意,当文件位于JARweb.xml
的文件夹中时,无需注册)*.taglib.xml
/META-INF
/WEB-INF/lib
最后在您的模板中使用它,如下所示:
<html ... xmlns:my="http://example.com/jsf/facelets">
...
<my:some />
也可以看看:
于 2013-02-07T13:19:26.080 回答