Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
2013_1 / КСТ / Разработка веб-приложений.pdf
Скачиваний:
160
Добавлен:
23.02.2015
Размер:
2.74 Mб
Скачать

9.Отредактировать файл web.xml, чтобы заменить имя страницы приветствия

на greeting.html.

10.Сделать щелчок правой клавишей мыши по узлу проекта. Выбрать Build из меню, чтобы компилировать и сформировать приложение.

11.Сделать щелчок правой клавишей мыши по проекту. Выбрать Deploy, чтобы

развернуть приложение на сервере Sun GlassFishTM v3.

12.Для доступа к приложению напечатать следующий URL в окне просмотра: http://localhost:8080/guessNumber.

4.3.Использование шаблонов

JavaServer Faces 2.0 обеспечивает инструментальные средства для работы с

легко расширяемыми и многократно используемыми интерфейсами пользователя. Templating — полезное средство, доступное вместе с Facelets, позволяющее создать

страницу, которая станет базой или шаблоном для других страниц в приложении.

Используя шаблоны, можно многократно использовать код и избегать повторного соз-

дания аналогичных страниц. Templating также помогает поддерживать стандартный

вид приложений со многими страницами.

Теги Facelets, которые используются для работы с шаблонами, и их функциональное назначение описаны в табл. 4.2

 

Таблица 4.2

 

Теги Facelets Templating

 

 

Тег

Функция

ui:component

Определяет компонент, который создан и добавлен к компонентному дереву

ui:composition

Определяет страничную композицию, дополнительно используемую

 

шаблоном. Содержимое вне этого тега игнорируется

ui:debug

Определяет отладочный компонент дерева

 

 

ui:define

Определяет содержимое, которое включено на страницу шаблона

ui:decorate

Подобен тегу композиции, но не игнорирует содержимое за пределами

 

этого тега

ui:fragment

Подобен компонентному тегу, но не игнорирует содержимое за пределами

 

этого тега

ui:include

Инкапсулирует и использует многократно содержимое для многих страниц

ui:insert

Включает содержимое в шаблон.

ui:param

Используется, чтобы передавать параметры во включенный файл

 

 

ui:repeat

Используется как альтернатива для тегов цикла, как, например, c:forEach

 

или h:dataTable

ui:remove

Удаляет содержимое со страницы

Библиотека тегов Facelets включает основной тег <ui:insert>. Страница шаблона создается этим тегом. Он допускает определять структуру по умолчанию для страницы. Страница шаблона может повторно использоваться как шаблон для создания

другой страницы, обычно именуемой страницей клиента.

51

Пример шаблона с именем 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:ui="http://java.sun.com/jsf/facelets"

xmlns:h="http://java.sun.com/jsf/html">

<h:head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

<link href="./resources/css/default.css" rel="stylesheet" type="text/css" />

<link href="./resources/css/cssLayout.css" rel="stylesheet" type="text/css" />

<title>Facelets Template</title> </h:head>

<h:body>

<div id="top" class="top">

<ui:insert name="top">Top Section</ui:insert> </div>

<div>

<div id="left">

<ui:insert name="left">Left Section</ui:insert> </div>

<div id="content" class="left_content">

<ui:insert name="content">Main Content</ui:insert> </div>

</div>

</h:body>

</html>

Данный пример определяет типичную страницу HTML, которая подразделена на три секции: верхняя, левая и основная. Секции имеют связанные с ними таблицы стилей (stylesheets). Эта структура может быть использована повторно для других страниц приложения.

Страница клиента вызывает шаблон, используя тег <ui:composition>. В следую-

щем примере страница клиента с именем templateclient.xhtml включает в свой состав страницу шаблона из предыдущего примера с именем template.xhtml. Страница клиента позволяет включить внутреннее содержимое с помощью тега <ui:define>.

<!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:ui="http://java.sun.com/jsf/facelets"

xmlns:h="http://java.sun.com/jsf/html">

<h:body>

<ui:composition template="./template.xhtml"> <ui:define name="top">

Welcome to Template Client Page </ui:define>

<ui:define name="left">

<h:outputLabel value="You are in the Left Section"/>

52

</ui:define>

<ui:define name="content"> <h:graphicImage

value="#{resource[’images:wave.med.gif’]}"/> <h:outputText value="You are in the Main Content

Section"/>

</ui:define>

</ui:composition>

</h:body>

</html>

Составные компоненты

JavaServer Faces поддерживает концепции составных компонентов Facelets.

Составной компонент может считаться специальным типом шаблона, который действует как один компонент.

Любой компонент по существу является частью многократно используемого

кода, который выполняет определённую функцию. Например, компонент inputText спо-

собен принимать ввод пользователя. Компонент также может иметь прикреплённые к

нему проверки, преобразователи и слушатели, чтобы выполнять нужные операции.

Составной компонент состоит из набора тегов разметки и других существующих компонентов. Это многократно используемый, созданный пользователем компонент, который можно изменять по желанию программиста. Он имеет определённую функци-

ональность и может иметь связанные с ним проверки, преобразователи и слушатели,

подобно любому другому компоненту JavaServer Faces.

С помощью технологии Facelets любая страница XHTML, которая включает разметку и другие компоненты, может быть преобразована в составной компонент. Используя ресурсы, составной компонент можно загрузить в библиотеку, которая до-

ступна для приложения.

Наиболее используемые общие составные теги и их функции содержатся в табл. 4.3.

 

Таблица 4.3

 

Теги составных компонент

 

 

Тег

Функция

composite:interface

Объявляет интерфейс для использования составного

 

компонента. Составной компонент может быть использован

 

как единственный компонент, для которого набор

 

характеристик является объединением характеристик,

 

объявленных в интерфейсе

composite:implementation

Определяет реализацию составного компонента. Если

 

появляется элемент <composite:interface>, то должен быть

 

соответствующий <composite:implementation>

composite:attribute

Объявляет атрибут, который может быть задан составному

 

компоненту, в котором этот тег объявлен

composite:insertChildren

Любой дочерний компонент или текст шаблона внутри тега

 

составного компонента в использованной странице будет

 

потомком составного компонента в точке размещения тега

 

в пределах секции composite:implementation

53

 

Окончание табл. 4.3

 

 

Тег

Функция

composite:valueHolder

Объявляет составной компонент, чей интерфейс определен

 

в composite:interface, в котором этот элемент вложен, нужно

 

показывать как реализацию ValueHolder целевого объекта в

 

используемой странице

composite:editableValueHolder

Объявляет составной компонент, чей интерфейс объявлен

 

в composite:interface, в котором этот элемент вложен. Нужно

 

показывать как реализацию EditableValueHolder целевого

 

объекта в используемой странице

composite:actionSource

Объявляет составной компонент, чей интерфейс объявлен

 

в composite:interface, в котором этот элемент вложен. Нужно

 

показывать как реализациюActionSource2 целевого объекта

 

в используемой странице

С более подробным и полным списком составных этикеток Facelets можно озна-

комиться по адресу http://java.sun.com/javaee/javaserverfaces/2.0/docs/pdldocs/facelets/ index.html.

Следующий пример показывает составной компонент, который принимает ввод адреса email:

<!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:composite="http://java.sun.com/jsf/composite" xmlns:h="http://java.sun.com/jsf/html">

<h:head>

<title>This content will not be displayed </title> </h:head>

<h:body>

<composite:interface>

<composite:attribute name="value" required="false"/> </composite:interface>

<composite:implementation>

<h:outputLabel value="Email id: "> </h:outputLabel> <h:inputText value="#{cc.attrs.value}"> </h:inputText>

</composite:implementation>

</h:body>

</html>

Обратите внимание на использование cc.attrs.value при определении компо-

нента inputText. Слово «cc» в JavaServer Faces — резервное слово для составных

компонентов. Выражение #{cc.attrs.ATTRIBUTE_NAME} используется, чтобы иметь до-

ступ к атрибутам, определённым для интерфейса составного компонента, в данном случае, для размещения там принятого значения.

Предыдущее содержимое примера хранится в файле email.xhtml, в папке resources/emcomp в корневом директории веб-приложения. Эта директория считается библиотекой JavaServer Faces, и UIcomponent может быть доступен из такой библиотеки.

54

Страница веб, которая использует этот составной компонент, обычно называется использующей страницей. Использующая страница включает ссылку в деклараци-

ях xml namespace на составной компонент:

<!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:em="http://java.sun.com/jsf/composite/emcomp/"> <h:head>

<title>Using a sample composite component</title> </h:head>

<body>

<h:form>

<em:email value="Enter your email id" /> </h:form>

</body>

</html>

Локальная библиотека составных компонент определена в xml namespace де-

кларацией xmlns:em="http://java.sun.com/jsf/composite/emcomp. Этот компонент досту-

пен с помощью тега em:email. Предыдущее содержимое примера может быть загружено как веб-страница emuserpage.xhtml в корневом директории. Когда приложение скомпилировано и развёрнуто на сервере, оно может быть доступно следующему

URL: http://localhost:8080/<application_name>/faces/emuserpage.xhtml.

Ресурсы

Ресурсы ссылаются на любые файлы, требуемые приложению для соответствующего представления. Они включают рисунки, файлы сценария и любые созданные пользователями компонентные библиотеки. Согласно JavaServer Faces 2.0, ресурсы должны быть собраны в стандартной папке, которая может быть одной из следующих:

ресурс, упакованный в корень приложения веб, должен быть в поддиректории

ресурсов: resources/<идентификатор>;

ресурс, упакованный в classpath приложения, должно быть в поддиректории

META-INF/resources в пределах веб-приложения:

META-INF/resources/<идентификатор>.

JavaServer Faces во время прогона ищет ресурсы в указанных выше позициях

в том же порядке.

Идентификаторы ресурса являются уникальными строками, которые соответствуют следующему формату:

[localePrefix/][libraryName/][libraryVersion/]resource name[/resourceVersion].

Элементы идентификатора ресурса в квадратных скобках ([ ]) необязательны.

Необходимым элементом является только имя ресурса — обычное имя файла.

Любой объект, подобно составному компоненту или шаблону, который загружен

в директорию ресурсов, становится доступным в других компонентах приложения, которое может использовать их, чтобы создавать экземпляр ресурса.

55

Соседние файлы в папке КСТ