Facelets - Facelets

Facelets
Стабильный выпуск
2.0 / 28 июня 2009 г. (2009-06-28)
Написано вЯва
Операционная системаКроссплатформенность
ТипСистема веб-шаблонов
Интернет сайтлица.dev.Ява.сеть Отредактируйте это в Викиданных
Автономные Facelets
Стабильный выпуск
1.1.15 / 24 ноября 2009 г. (2009-11-24)
Предварительный выпуск
1.2-dev / 10 ноября 2006 г. (2006-11-10)
Написано вЯва
Операционная системаКроссплатформенность
Размер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] в то время как для настраиваемых тегов такое требование отсутствует, и значения, предоставленные для произвольных атрибутов, становятся доступными как переменные с тем же именем, что и указанный атрибут.

Смотрите также

Рекомендации

  1. ^ Ханс Бергстен (6 июня 2004 г.). «Улучшение JSF путем сброса JSP». O'Reilly Media.
  2. ^ "Facelets: JavaServer Facelets". archive.org. 6 июля 2007 г. Архивировано с оригинал 6 июля 2007 г.. Получено 22 ноября 2016.
  3. ^ а б «JSF Central - Inside Facelets, часть 1: Введение». archive.org. 13 января 2013. Архивировано из оригинал 13 января 2013 г.. Получено 22 ноября 2016.
  4. ^ JavaServer Faces 2.0, Полный справочник Эда Бернса и Криса Шала, стр. 55: «Группа экспертов решила продвинуться вперед с Facelets в качестве основы для новых функций, оставив JSP как уровень обратной совместимости».
  5. ^ JSF 2.0 (JSR 314, http://jcp.org/en/jsr/detail?id=314 ), версия обслуживания 2, раздел 10.1: «Facelets - это замена JSP, которая с самого начала была разработана с учетом JSF. Новые функции, представленные в версии 2 и более поздних, доступны только авторам страниц, использующим Facelets. JSP сохранен для обратной совместимости.
  6. ^ "Новые вопросы по jsf". stackoverflow.com. Получено 22 ноября 2016.
  7. ^ JavaServer Faces 2.0, полный справочник Эда Бернса и Криса Шалка
  8. ^ Core JavaServer Faces (3-е издание) Дэвида Гири и Кея С. Хорстманна
  9. ^ «JSF 2 fu, Часть 2: Шаблоны и составные компоненты». ibm.com. 2 июня 2009 г.. Получено 22 ноября 2016.
  10. ^ "ui (Язык оформления страниц JSF 2.0: вариант Facelets)". oracle.com. Получено 22 ноября 2016.
  11. ^ "include (Язык оформления страниц JSF 2.0: вариант Facelets)". oracle.com. Получено 22 ноября 2016.
  12. ^ «Что следует помнить: интерфейс Facelets: включение считается эффективным». pilhuhn.blogspot.com. 4 декабря 2009 г.. Получено 22 ноября 2016.
  13. ^ «Пользовательские компоненты JSF с Facelets». wordpress.com. 29 февраля 2008 г. Архивировано с оригинал 19 октября 2016 г.. Получено 22 ноября 2016.
  14. ^ "составной (язык оформления страниц JSF 2.0: вариант Facelets)". oracle.com. Получено 22 ноября 2016.
  15. ^ "Что нового в JSF 2?". wordpress.com. 31 июля 2009 г.. Получено 22 ноября 2016.
  16. ^ JSR 314, 10.3.3.1, http://jcp.org/en/jsr/detail?id=314
  17. ^ "param (JSF 2.0 Page Decraration Language: Facelets Variant)". oracle.com. Получено 22 ноября 2016.
  18. ^ "интерфейс (JSF 2.0 Page Decraration Language: Facelets Variant)". oracle.com. Получено 22 ноября 2016.

Библиография

внешняя ссылка