Как создать собственный тег Facelets?
Я использую JSF 2.0. Я создал пользовательские теги JSTL с файлами тегов, и они отлично работали в JSP. Но я хочу использовать собственные теги JSTL и в Facelets. Можно ли создавать файлы тегов в Facelets или нет?
1 ответ
"Пользовательские теги 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>
и зарегистрируйте его в /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 />