Как создать пользовательский тег Facelets?

Я использую JSF 2.0. Я создал пользовательские теги JSTL с tagfiles и отлично работал в JSP. Но я хочу использовать пользовательские теги JSTL в Facelets. Возможно ли создать файлы тегов в Facelets или нет?

Ответ 1

"Пользовательские теги JSTL" не имеет смысла. Этот термин совершенно бессмыслен. JSTL уже является taglib самостоятельно. Пожалуйста, внимательно прочитайте вступительные параграфы нашей страницы Wiki JSTL, чтобы узнать, что такое JSTL. Возможно, вы имели в виду " Пользовательские теги JSP". Конечно, они не будут работать в Facelets как совершенно другая технология просмотра, чем JSP и на самом деле преемник устаревшего JSP.

Ну, аналогия "Custom JSP tag" - это "Пользовательский тег Facelets" или, чаще, "Файл тегов Facelets". Это довольно просто, вы можете следовать тому же синтаксису, что и файл include.

/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>

(обратите внимание, что регистрация в web.xml не нужна, если файл *.taglib.xml находится в папке /META-INF JAR в /WEB-INF/lib)

и, наконец, использовать его в своих шаблонах следующим образом:

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

См. также: