Фасеты
Стабильная версия | 2.0
/ 28 июня 2009 г. |
---|---|
Написано в | Ява |
Операционная система | Кросс-платформенный |
Тип | Система веб-шаблонов |
Веб-сайт | грани ![]() |
Стабильная версия | 1.1.15
/ 24 ноября 2009 г. |
---|---|
Предварительный выпуск | 1,2-разв.
/ 10 ноября 2006 г. |
Написано в | Ява |
Операционная система | Кросс-платформенный |
Размер | 5,07 МБ (в архиве) |
Тип | Система веб-шаблонов |
Лицензия | Лицензия Апач 2.0 |
Веб-сайт | грани |
В области Facelets вычислений — это с открытым исходным кодом, система веб-шаблонов действующая под лицензией Apache и технологией обработчика представлений по умолчанию (также известной как язык объявления представлений) для Jakarta Faces (JSF; ранее Jakarta Server Faces и JavaServer Faces). Для работы языка требуются действительные входные XML- документы. Facelets поддерживает все компоненты пользовательского интерфейса JSF и полностью сосредоточен на построении дерева компонентов JSF, отражающего представление приложения JSF.
Хотя технологии JSP и Faces были улучшены для лучшей совместной работы, Facelets устраняет проблемы, отмеченные в Ханса Бергстена «Улучшение JSF путем сброса JSP». статье [ 1 ]
Facelets опирается на некоторые идеи Apache Tapestry . [ 2 ] [ 3 ] и достаточно похож, чтобы провести сравнение. Концептуально проект аналогичен проекту Tapestry, который рассматривает блоки элементов HTML как компоненты инфраструктуры, поддерживаемые классами Java. Facelets также имеет некоторое сходство с платформой Apache Tiles в отношении поддержки шаблонов и композиции.
Facelets изначально был создан Джейкобом Хукомом в 2005 году. [ 3 ] как отдельный альтернативный язык объявления представлений для JSF 1.1 и JSF 1.2, в которых JSP использовался в качестве языка объявления представлений по умолчанию. Начиная с JSF 2.0, группа экспертов JSF продвигает Facelets в качестве языка объявления представлений по умолчанию. JSP устарел как устаревший вариант. [ 4 ] [ 5 ]
Преобразование элементов
[ редактировать ]В Facelets теги шаблонов из библиотеки тегов можно вводить в двух формах: напрямую как квалифицированные теги. xml
элемент или косвенно через jsfc
атрибут произвольного неквалифицированного элемента. В последнем случае компилятор Facelet проигнорирует фактический элемент и обработает его так, как если бы он был задан jsfc
атрибут.
В следующем примере показано прямое использование квалифицированных тегов:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0
Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html">
<body>
<h:form>
<h:outputText value="Welcome, #{loggedInUser.name}" disabled="#{empty loggedInUser}" />
<h:inputText value="#{bean.property}" />
<h:commandButton value="OK" action="#{bean.doSomething}" />
</h:form>
</body>
</html>
Используя jsfc
атрибут, тот же код можно также выразить в примере, приведенном ниже:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0
Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html">
<body>
<form jsfc="h:form">
<span jsfc="h:outputText" value="Welcome, #{loggedInUser.name}" disabled="#{empty loggedInUser}" />
<input type="text" jsfc="h:inputText" value="#{bean.property}" />
<input type="submit" jsfc="h:commandButton" value="OK" action="#{bean.doSomething}" />
</form>
</body>
</html>
Приведенный выше код можно просмотреть в браузере и отредактировать с помощью обычных инструментов дизайна WYSIWYG . Это невозможно при непосредственном использовании квалифицированных тегов. Тем не менее, непосредственное использование квалифицированных тегов является наиболее популярным способом использования Facelets на практике. [ 6 ] и этот стиль чаще всего используется в книгах и примерах. [ 7 ] [ 8 ]
Шаблонизация
[ редактировать ]Facelets предоставляет возможность создания шаблонов. [ 9 ] [ 10 ] Файл Facelets может ссылаться на главный шаблон и предоставлять содержимое для заполнителей, которые определяет этот главный шаблон. Файл, ссылающийся на такой шаблон, называется клиентом шаблона . Сами клиенты шаблонов снова могут использоваться в качестве шаблонов для других клиентов шаблонов, и таким образом можно создать иерархию шаблонов.
Ниже показан пример простого главного шаблона:
шаблоны/master_template.xhtml
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0
Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets">
<h:head>
<meta http-equiv="content-type" content="text/html;charset=UTF-8"/>
<meta http-equiv="pragma" content="no-cache"/>
</h:head>
<h:body>
Standard header text for every page.
<ui:insert name="body_content" />
Standard footer text for every page.
</h:body>
</html>
Приведенный выше код содержит HTML-фрейм по умолчанию и один заполнитель с именем body_content . Клиент шаблона может использовать этот шаблон следующим образом:
шаблон_клиент.xhtml
<ui:composition template="/templates/master_template.xhtml"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets">
<ui:define name="body_content">
This is a template client page that uses the master template.
</ui:define>
</ui:composition>
В приведенном выше коде используется шаблон /templates/master_template.xhtml
и предоставляет содержимое для заполнителя в этом шаблоне. Конечным результатом будет страница с названием template_client.xhtml
который имеет содержание /templates/master_template.xhtml
, но с <ui:insert name="body_content"/>
заменено на «Это страница клиента шаблона, использующая главный шаблон».
Повторное использование контента
[ редактировать ]Помимо шаблонов, Facelets обеспечивает поддержку повторного использования, позволяя пользователю включать контент, находящийся в другом файле. Включить такой контент можно тремя разными способами:
- Ссылка на файл
- Пользовательские теги
- Композитные компоненты
Ссылка на файл
[ редактировать ]Самый простой способ включить содержимое другого Facelet — сослаться на него по имени, используя метод <ui:include>
ярлык. [ 11 ] [ 12 ] В результате содержимое указанного файла будет напрямую включено в вызывающий Facelet компилятором Facelets. Помимо повторного использования контента в нескольких местах, это можно использовать для разбиения большого Facelet на более мелкие части.
Ниже приведен пример:
шаблоны/master_template.xhtml
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0
Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets">
<ui:include src="html_head.xhtml" />
<h:body>
Standard header text for every page.
<ui:insert name="body_content" />
Standard footer text for every page.
</h:body>
</html>
html_head.xhtml
<ui:composition
xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html">
<h:head>
<meta http-equiv="content-type" content="text/html;charset=UTF-8"/>
<meta http-equiv=" pragma" content="no-cache"/>
</h:head>
</ui:composition>
Пользовательские теги
[ редактировать ]Facelets поддерживает косвенное включение контента с помощью пользовательских тегов. [ 13 ] Такой пользовательский тег можно связать с Facelet в файле библиотеки тегов. Вхождения этого тега затем будут заменены содержимым связанного Facelet.
Ниже приведен пример этого:
шаблоны/master_template.xhtml
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0
Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:my="http://example.com/my">
<ui:include src="html_head.xhtml" />
<h:body>
Standard header text for every page.
<my:spacer>
<ui:insert name="body_content" />
Standard footer text for every page.
</h:body>
</html>
В приведенном выше коде используется тег <my:spacer>
чтобы отметить точку в Facelet, куда необходимо вставить контент. Такой тег должен быть объявлен в файле Taglib, где его можно связать с Facelet следующим образом:
пример.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/my</namespace>
<tag>
<tag-name>spacer</tag-name>
<source>spacer.xhtml</source>
</tag>
</facelet-taglib>
Ниже показан пример того, как может выглядеть реальный контент Facelet:
spacer.xhtml
<ui:composition
xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html">
<h:outputText value="&nbsp;" escape="false"/>
</ui:composition>
Композитные компоненты
[ редактировать ]Помимо прямого включения контента, Facelets предоставляет механизм составных компонентов, который делает контент доступным как первоклассный компонент JSF. [ 14 ] [ 15 ] Составные компоненты не обязательно объявлять в файле Taglib, их нужно поместить в специальный каталог. По соглашению содержимому автоматически присваивается пространство имен и имя тега. Пространство имен состоит из фиксированной строки « http://java.sun.com/jsf/composite/», объединенной с именем каталога, в котором находится файл содержимого, относительно каталога «ресурсы». [ 16 ] Имя тега становится именем файла без суффикса .xhtml.
Ниже приведен пример этого:
ресурсы/мой/spacer.xhtml
<ui:composition
xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:cc="http://java.sun.com/jsf/composite">
<cc:interface/>
<cc:implementation>
<h:outputText value="&nbsp;" escape="false"/>
</cc:implementation>
</ui:composition>
Вышеупомянутый Facelet автоматически доступен как компонент в пространстве имен «http://java.sun.com/jsf/composite/my» и имени тега «spacer».
Параметризированные включает в себя
[ редактировать ]Для настройки включенного контента Facelets позволяет использовать параметры. С помощью этих параметров объекты можно передавать во включенный контент, где их можно использовать в качестве переменных. Для <ui:include>
механизм <ui:param>
для этого можно использовать, [ 17 ] тогда как для пользовательских тегов и составных компонентов можно использовать обычные атрибуты тегов. Составные компоненты требуют, чтобы параметры были объявлены в их разделе интерфейса. [ 18 ] тогда как для пользовательских тегов такого требования нет, и значения, предоставленные для произвольных атрибутов, доступны как переменные с тем же именем, что и указанный атрибут.
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ Бергстен, Ганс (9 июня 2004 г.). «Улучшение JSF путем сброса JSP» . ONJava . О'Рейли Медиа . Архивировано из оригинала 5 апреля 2018 г.
- ^ «Facelets: платформа определения представления JavaServer Faces» . java.net . Архивировано из оригинала 31 декабря 2016 г.
- ^ Перейти обратно: а б Хуком, Джейкоб (17 августа 2005 г.). «Внутри Facelets. Часть 1: Введение» . JSFCentral . Архивировано из оригинала 5 января 2020 г.
- ^ Бернс, Эд; Шалк, Крис (2009). JavaServer Faces 2.0, Полный справочник . МакГроу-Хилл . ISBN 978-0-07-162509-8 . п. 55:
Экспертная группа решила продолжить использование Facelets в качестве основы для новых функций, оставив при этом JSP в качестве уровня обратной совместимости.
- ^ Бернс, Эд; Китейн, Роджер, ред. (8 ноября 2010 г.). Спецификация JavaServer Faces, версия 2.1 . JCP (Технический отчет) (изд. MR2). Оракул . JSR-314. п. 10-1:
Facelets — это замена JSP, которая с самого начала разрабатывалась с учетом JSF. Новые функции, представленные в версии 2 и более поздних версиях, доступны только авторам страниц, использующим Facelets. JSP сохранен для обратной совместимости.
- ^ «Новейшие вопросы о JSF» . stackoverflow.com . Проверено 22 ноября 2016 г.
- ^ JavaServer Faces 2.0, Полный справочник Эда Бернса и Криса Шалка
- ^ Core JavaServer Faces (3-е издание) Дэвида Гири и Кея С. Хорстманна
- ^ «JSF 2 fu, Часть 2: Шаблоны и составные компоненты» . IBM.com . 2 июня 2009 года . Проверено 22 ноября 2016 г.
- ^ "ui (Язык декрарации страниц JSF 2.0: вариант Facelets)" . oracle.com . Проверено 22 ноября 2016 г.
- ^ "include (Язык декрарации страниц JSF 2.0: вариант Facelets)" . oracle.com . Проверено 22 ноября 2016 г.
- ^ «Некоторые вещи, которые следует помнить: Facelets ui:include считаются мощными» . pilhuhn.blogspot.com . 4 декабря 2009 года . Проверено 22 ноября 2016 г.
- ^ «Пользовательские компоненты JSF с Facelets» . WordPress.com . 29 февраля 2008 г. Архивировано из оригинала 19 октября 2016 г. . Проверено 22 ноября 2016 г.
- ^ "composite(Язык декрарации страниц JSF 2.0: вариант Facelets)" . oracle.com . Проверено 22 ноября 2016 г.
- ^ «Что нового в JSF 2?» . WordPress.com . 31 июля 2009 года . Проверено 22 ноября 2016 г.
- ^ JSR 314, 10.3.3.1, http://jcp.org/en/jsr/detail?id=314
- ^ "param(Язык декрарации страниц JSF 2.0: вариант Facelets)" . oracle.com . Проверено 22 ноября 2016 г.
- ^ "интерфейс (язык декрарации страниц JSF 2.0: вариант Facelets)" . oracle.com . Проверено 22 ноября 2016 г.
Библиография
[ редактировать ]- Вадиа, Зубин; Мариншек, Мартин; Салех, Хазем; Бирн, Деннис (22 сентября 2008 г.). Полное руководство по Apache MyFaces и Facelets (1-е изд.). Апресс . п. 400. ИСБН 978-1-59059-737-8 . Архивировано из оригинала 2 января 2010 года . Проверено 4 сентября 2009 г.
- Вадиа, Зубин; Аранда, Бруно (26 мая 2008 г.). Facelets Essentials: Руководство по JavaServer Faces View Definition Framework (1-е изд.). Апресс . п. 84. ИСБН 978-1-4302-1049-8 . Архивировано из оригинала 8 января 2010 года . Проверено 4 сентября 2009 г.
Внешние ссылки
[ редактировать ]- « Введение в Facelets » Глава 8 руководства по Jakarta EE
- Документация разработчика Facelets на Wayback Machine (архивировано 31 декабря 2016 г.)
- Хайтауэр, Ричард (21 февраля 2006 г.). «Facelets подходит JSF как перчатки» . Ява. РазработчикWorks . ИБМ . Архивировано из оригинала 24 февраля 2021 г.
- Домашняя страница Facelets на Wayback Machine (архивировано 4 апреля 2017 г.)