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