Facelets - Facelets
Стабильный выпуск | 2.0 / 28 июня 2009 г. |
---|---|
Написано в | Ява |
Операционная система | Кроссплатформенность |
Тип | Система веб-шаблонов |
Интернет сайт | лица |
Стабильный выпуск | 1.1.15 / 24 ноября 2009 г. |
---|---|
Предварительный выпуск | 1.2-dev / 10 ноября 2006 г. |
Написано в | Ява |
Операционная система | Кроссплатформенность |
Размер | 5.07 МБ (в архиве) |
Тип | Система веб-шаблонов |
Лицензия | Лицензия Apache 2.0 |
Интернет сайт | http://facelets.java.net/ |
В вычисление, Facelets является Открытый исходный код Система веб-шаблонов под Лицензия Apache и технология обработчика представления по умолчанию (также известная как язык объявления представления) для Лица серверов Джакарты (JSF; ранее JavaServer Faces ). Язык требует правильного ввода XML документы на работу. Facelets поддерживает все JSF Компоненты пользовательского интерфейса и полностью сосредоточен на построении дерева компонентов JSF, отражающего Посмотреть для приложения JSF.
Хотя оба JSP и JSF были улучшены, чтобы лучше работать вместе, Facelets устраняет проблемы, указанные в Ганс Бергстен статья "Улучшение JSF путем сброса JSP"[1]
Facelets опирается на некоторые идеи Гобелен Apache,[2][3] и достаточно похож, чтобы провести сравнение. Проект концептуально аналогичен проекту Tapestry, который рассматривает блоки элементов HTML как компоненты фреймворка, поддерживаемые классами Java. Facelets также имеет некоторое сходство с Плитки Apache framework в отношении поддержки шаблонов, а также композиции.
Facelets был создан Джейкобом Хуком в 2005 году.[3] как отдельный альтернативный язык объявления представлений для JSF 1.1 и JSF 1.2, которые оба использовали JSP в качестве языка объявления представлений по умолчанию. Начиная с JSF 2.0, группа экспертов JSF продвинула Facelets в качестве языка объявления представлений по умолчанию. JSP устарел как устаревший вариант.[4][5]
Преобразование элемента
В Facelets теги шаблонов из библиотеки тегов можно вводить в двух формах: непосредственно как квалифицированный xml
элемент или косвенно через jsfc
атрибут произвольного неквалифицированного элемента. В последнем случае компилятор Facelet проигнорирует фактический элемент и обработает элемент, как если бы он был задан jsfc
атрибут.
В следующем примере показано прямое использование квалифицированных тегов:
Transitional // EN "" http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd "> xmlns ="http://www.w3.org/1999/xhtml" xmlns: h ="http://java.sun.com/jsf/html"> <body> <h:form> значение ="Добро пожаловать, # {loggedInUser.name}" отключен ="# {пустой loggedInUser}" /> <ч: inputText значение ="# {bean.property}" /> значение ="OK" действие ="# {bean.doSomething}" /> </h:form> </body></html>
С использованием jsfc
атрибут, тот же код можно также выразить в примере, приведенном ниже:
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"> <тело> <форма jsfc="ч: форма"> <охватывать jsfc="h: outputText" ценить="Добро пожаловать, # {loggedInUser.name}" отключен="# {пустой loggedInUser}" /> <Вход тип="текст" jsfc="h: inputText" ценить="# {bean.property}" /> <Вход тип="Разместить" jsfc="h: commandButton" ценить="OK" действие="# {bean.doSomething}" /> </форма> </тело></html>
Приведенный выше код можно просмотреть в браузере и отредактировать обычным WYSIWYG инструменты дизайна. Это невозможно при прямом использовании квалифицированных тегов. Тем не менее, прямое использование квалифицированных тегов - самый популярный способ использования Facelets на практике. [6] и это стиль, который чаще всего используется в книгах и примерах.[7][8]
Шаблоны
Facelets предоставляет возможность создания шаблонов.[9][10] Файл Facelets может ссылаться на главный шаблон и предоставлять контент для заполнителей, которые определяет этот главный шаблон. Файл, который ссылается на такой шаблон, называется клиент шаблона. Сами клиенты-шаблоны могут снова использоваться в качестве шаблона для других клиентов-шаблонов и, таким образом, может быть создана иерархия шаблонов.
Ниже показан пример простого главного шаблона:
шаблоны / master_template.xhtml
Transitional // EN "" http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd "> 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> <мета http-Equiv ="Тип содержимого" содержание ="text / html; charset = UTF-8"/> <мета http-Equiv ="прагма" содержание ="без кеша"/> </h:head> <h:body> Стандартный текст заголовка для каждой страницы. имя ="body_content" /> Стандартный текст нижнего колонтитула для каждой страницы. </h:body></html>
Приведенный выше код содержит фрейм HTML по умолчанию и единственный заполнитель с именем body_content. Клиент шаблона может использовать этот шаблон следующим образом:
template_client.xhtml
template ="/templates/master_template.xhtml" xmlns ="http://www.w3.org/1999/xhtml" xmlns: ui ="http://java.sun.com/jsf/facelets"> имя ="body_content"> Это клиентская страница шаблона, использующая главный шаблон. </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
Transitional // EN "" http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd "> xmlns ="http://www.w3.org/1999/xhtml" xmlns: h ="http://java.sun.com/jsf/html" xmlns: ui ="http://java.sun.com/jsf/facelets"> src ="html_head.xhtml" /> <h:body> Стандартный текст заголовка для каждой страницы. имя ="body_content" /> Стандартный текст нижнего колонтитула для каждой страницы. </h:body></html>
html_head.xhtml
xmlns ="http://www.w3.org/1999/xhtml" xmlns: h ="http://java.sun.com/jsf/html"> <h:head> <мета http-Equiv ="Тип содержимого" содержание ="text / html; charset = UTF-8"/> <мета http-Equiv ="прагма" содержание ="без кеша"/> </h:head></ui:composition>
Пользовательские теги
Facelets поддерживает косвенное обращение для включения содержимого через настраиваемые теги.[13] Такой настраиваемый тег может быть связан с Facelet в файле taglib. Вхождения этого тега затем будут заменены содержимым связанного Facelet.
Ниже показан пример этого:
шаблоны / master_template.xhtml
Transitional // EN "" http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd "> 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"> src ="html_head.xhtml" /> <h:body> Стандартный текст заголовка для каждой страницы. <my:spacer> имя ="body_content" /> Стандартный текст нижнего колонтитула для каждой страницы. </h:body></html>
В приведенном выше коде используется тег <my:spacer>
чтобы отметить точку в Facelet, куда нужно вставить контент. Такой тег должен быть объявлен в файле Taglib, где его можно связать с Facelet следующим образом:
example.taglib.xml
<?xml version="1.0" encoding="UTF-8"?> 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" версия ="2.0"> <namespace>http://example.com/my</namespace> <tag> <tag-name>распорка</tag-name> <source>spacer.xhtml</source> </tag></facelet-taglib>
Ниже показан пример того, как может выглядеть фактическое содержимое Facelet:
spacer.xhtml
xmlns ="http://www.w3.org/1999/xhtml" xmlns: ui ="http://java.sun.com/jsf/facelets" xmlns: h ="http://java.sun.com/jsf/html"> значение ="& amp; nbsp;" escape ="ложный"/></ui:composition>
Композитные компоненты
Помимо непосредственного включения контента, Facelets предоставляет механизм составных компонентов, который делает контент доступным как первоклассный компонент JSF.[14][15] Составные компоненты не нужно объявлять в файле Taglib, вместо этого их нужно поместить в специальный каталог. К соглашение затем контенту автоматически назначается пространство имен и имя тега. Пространство имен состоит из фиксированной строки 'http://java.sun.com/jsf/composite/ ' объединены с именем каталога, в котором находится файл содержимого, относительно каталога ресурсов.[16] Имя тега становится именем файла без суффикса .xhtml.
Ниже показан пример этого:
ресурсы / мой / spacer.xhtml
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> значение ="& amp; nbsp;" escape ="ложный"/> </cc:implementation></ui:composition>
Вышеупомянутый Facelet автоматически доступен как компонент в пространстве имен http://java.sun.com/jsf/composite/my и имени тега spacer
Параметризованный включает
Facelets позволяет использовать параметры для настройки включенного содержимого. С помощью этих параметров объекты могут быть переданы во включенный контент, где они могут использоваться в качестве переменных. Для <ui:include>
механизм <ui:param>
можно использовать для этого,[17] в то время как для настраиваемых тегов и составных компонентов можно использовать обычные атрибуты тегов. Составные компоненты требуют, чтобы параметры были объявлены в их разделе интерфейса,[18] в то время как для настраиваемых тегов такое требование отсутствует, и значения, предоставленные для произвольных атрибутов, становятся доступными как переменные с тем же именем, что и указанный атрибут.
Смотрите также
Рекомендации
- ^ Ханс Бергстен (6 июня 2004 г.). «Улучшение JSF путем сброса JSP». O'Reilly Media.
- ^ "Facelets: JavaServer Facelets". archive.org. 6 июля 2007 г. Архивировано с оригинал 6 июля 2007 г.. Получено 22 ноября 2016.
- ^ а б «JSF Central - Inside Facelets, часть 1: Введение». archive.org. 13 января 2013. Архивировано из оригинал 13 января 2013 г.. Получено 22 ноября 2016.
- ^ JavaServer Faces 2.0, Полный справочник Эда Бернса и Криса Шала, стр. 55: «Группа экспертов решила продвинуться вперед с Facelets в качестве основы для новых функций, оставив JSP как уровень обратной совместимости».
- ^ JSF 2.0 (JSR 314, http://jcp.org/en/jsr/detail?id=314 ), версия обслуживания 2, раздел 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: включение считается эффективным». pilhuhn.blogspot.com. 4 декабря 2009 г.. Получено 22 ноября 2016.
- ^ «Пользовательские компоненты JSF с Facelets». wordpress.com. 29 февраля 2008 г. Архивировано с оригинал 19 октября 2016 г.. Получено 22 ноября 2016.
- ^ "составной (язык оформления страниц 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 Page Decraration Language: Facelets Variant)". oracle.com. Получено 22 ноября 2016.
- ^ "интерфейс (JSF 2.0 Page Decraration Language: Facelets Variant)". oracle.com. Получено 22 ноября 2016.
Библиография
- Вадиа, Зубин; Маринчек, Мартин; Салех, Хазем; Бирн, Деннис (22 сентября 2008 г.). Полное руководство по Apache MyFaces и Facelets (1-е изд.). Apress. п. 400. ISBN 978-1-59059-737-8. Архивировано из оригинал 2 января 2010 г.. Получено 4 сентября, 2009.
- Вадиа, Зубин; Аранда, Бруно (26 мая 2008 г.). Facelets Essentials: руководство по структуре определения представлений лиц JavaServer Faces (1-е изд.). Apress. п. 84. ISBN 978-1-4302-1049-8. Архивировано из оригинал 8 января 2010 г.. Получено 4 сентября, 2009.
внешняя ссылка
- "Введение в Facelets "Глава 8 Учебное пособие по Jakarta EE 8
- Документация разработчика Facelets на Wayback Machine (Архивировано 31 декабря 2016 г.)
- Хайтауэр, Ричард (21 февраля 2006 г.). "Facelets подходит JSF как перчатка". Ява. DeveloperWorks. IBM.
- Домашняя страница Facelets на Wayback Machine (Архивировано 4 апреля 2017 г.)