如何创建自定义Facelets标记?

Nis*_*sar 8 jsf facelets tagfile custom-tags jsf-2

我正在使用JSF 2.0.我使用tagfiles创建了自定义JSTL标记,并且在JSP中运行良好.但我也想在Facelets中使用自定义JSTL标签.是否可以在Facelets中创建标签文件?

Bal*_*usC 13

"自定义JSTL标签"真的没有意义.这个词完全没有意义.JSTL本身已经是一个taglib.请仔细阅读JSTL维基页面的介绍段落,了解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>
Run Code Online (Sandbox Code Playgroud)

并按/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>
Run Code Online (Sandbox Code Playgroud)

其依次登记/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>
Run Code Online (Sandbox Code Playgroud)

(请注意,web.xml*.taglib.xml文件/META-INF位于JAR 的文件夹中时,无需注册/WEB-INF/lib)

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

<html ... xmlns:my="http://example.com/jsf/facelets">
...
<my:some />
Run Code Online (Sandbox Code Playgroud)

也可以看看: