如何创建自定义Facelets标签?

10

我正在使用JSF 2.0。 我使用tag文件创建了自定义的JSTL标签,并且在JSP中正常工作。 但是我也想在Facelets中使用自定义的JSTL标签。 是否可以在Facelets中创建tag文件呢?


可能是重复的问题: http://stackoverflow.com/questions/7726523/migrating-from-jsf1-2-to-jsf2-0-what-to-do-with-jstl - Christophe Roussy
谢谢,我已经查看了那个问题,但是我创建了自定义的JSTL标签,在JSP中运行良好,但是当我在Faces中使用该标签时,通过给出“xmlns:ct =”http://ve.customTag“命名空间,它在Faces中无法工作。请告诉我如何在JSF中使用我的自定义JSTL标签。 - Nisar
1个回答

17

我使用标记文件创建了自定义的JSTL标签,并且在JSP中运行良好。

短语“自定义JSTL标签”没有意义。 JSTL本身已经是一个标签库。请阅读我们的JSTL wiki页面的介绍段落,了解JSTL的真正含义。您可能实际上是指“自定义JSP标签”。当然它们在Facelets中不起作用,因为那是与JSP完全不同的视图技术,并且实际上是被弃用的JSP的后继者。另请参见为什么从JSF2.0开始首选Facelets作为视图定义语言?

但是我也想在Facelets中使用自定义的JSTL标签

在Facelets中,“自定义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>
< p > < em > (请注意,在/WEB-INF/lib文件夹中的JAR的/META-INF文件夹中有*.taglib.xml文件时,不需要在web.xml中注册)

最后在您的模板中使用它,如下所示:

<html ... xmlns:my="http://example.com/jsf/facelets">
...
<my:some />

另请参阅:


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