(495) 925-0049, ITShop интернет-магазин 229-0436, Учебный Центр 925-0049
  Главная страница Карта сайта Контакты
Поиск
Вход
Регистрация
Рассылки сайта
 
 
 
 
 

Повторное использование ранее разработанных фрагментов страниц в ADF 10g и единое оформление страниц web-приложения

Источник: Oracle
Дмитрий Севостьянов, Oracle СНГ

При разработке любого современного web-приложения, состоящего более чем из одной страницы, возникает задача внедрения ранее разработанных фрагментов страниц во вновь создаваемые страницы (или фрагменты) а так же задача единообразного оформления всех страниц приложения в соответствии с корпоративными стандартами.

1. Повторное использование фрагментов страниц

Существуют несколько подходов и решений этой задачи: портлеты, технология Struts-Tiles, шаблоны и т. д. Каждый из подходов имеет свои недостатки и преимущества. В том числе и Oracle ADF предлагает для JSF (ADF Faces) такое решение.
Технологии JSP и JSF предлагают стандартные средства для внедрения фрагментов страниц в экранные формы (директивы jsp:include, page import и c:import). Однако, при использовании такой возможности ADF как datacontrol и декларативной привязке этих datacontrol к странице, возникает трудность. С каждой ADF Faces страницей ассоциирован файл привязок (<ADF_Faces_Page_Name>PageDef.xml1).

Эти привязки загружаются ядром ADF на этапе выполнения приложения и инициализируют необходимы переменные (привязки) заданными экземплярами объектов. Естественно, что стандартными директивами включения фрагментов страниц вышеописанные действия не предусмотрены.

Для решения такого типа задач ADF 10 g 2 предлагает использование пары тегов af:regionDef и af:region. Первый используется для определения области, которую можно использовать повторно, а второй позволяет дать команду ядру ADF загрузить описанную ранее область и связанные с ней переменные привязки. К тому же необходимо зарегистрировать определенные области повторного использования в специальном файле META-INF/region-metadata.xml, содержащем описание компонента (в соответствии со спецификацией JSF).

Пример приложения, использующего механизм повторного использования фрагмента страницы. Приложение оформлено в виде рабочего пространства JDeveloper (10.1.3.3) и состоит из двух проектов:


  • Model - проект, в котором находится бизнес-сервисс, представленный обычным Java-классом и его метаописание3;
  • ViewController - проект, в котором находится web-приложение, демонстрирующее повторное использование фрагмента страницы.

Бизнес-сервис представлен Java-классом

public class BrandingService
{
  public BrandingService()
  {
  }
  public String getBrandingContentName() 
  {
    return "Branding Application Sample";
  }
  public Date getBrandingDate() 
  {
    return new Date();
  }
  public String hello(String user) 
  {
    return "Hello, " + user;
  }
}

Дальнейшие действияпроизводятся в проекте ViewController.

Создаем обычную JSF страницу с помощью мастера со следующими параметрами

 

Наименование параметра

Значение параметра

Шаг 1

FileName

ContentFragment.jspx 

DirectoryName

$JWS_HOME/ViewController/public_html/region 

Type

JSP Document (*.jspx) 

Шаг 2

Component Binding

Automatically Expose UI Components in a New Managed Bean 

Шаг 3

Selected Libraries

ADF Faces Components
JSF Core 1.0
JDF HTML Core 1.0
 

На созданную страницу помещаем ADF Faces Component "PanelBox". В эту панель переносим из палитры бизнес-сервисов следующие атрибуты и методы
 

Наименование

ADF Faces Component

Контейнер

PanelBox 

Страница

brandingContentName 

ADF OutputText w/Label 

PanelBox 

ObjectSeparator 

PanleBox 

brandingDate 

ADF OutputText w/Label 

PanelBox 

ObjectSeparator 

PanleBox 

hello(String) 

Parameters/ADF Parameter Form 

PanelBox 

hello(String)->String 

ADF OutputText w/Label 

ParameterForm 

Следующим шагом является преобразование созданной страницы во фрагмент. Для этого необходимо удалить все теги, связанные с корневым оформлением (af:html, af:head, af:body и f:view). Проще всего сделать это следующим образом: поместить на страницу компонентf:subview и перетащить (см. рис. 1) панель panelBox1 непосредственно в контейнер f:subview и удалить компонент f:view. Теперь следует поместить панель внутрь тега af:regionDef4(см. рис.2)


Рис. 1. Перемещение af:panelBox в f:subview


Рис.2. Добавление тега af:regionDef

Теперь,когда страница подготовлена к повторному использованию, ее необходимо зарегистрировать в файле описания повторно используемых областей (META-INF/region-metadata.xml). Специального мастера для его создания в JDeveloper 10g нет, так что необходимо создать обычный документ XML и скопировать в него следующий текст (как заготовку):

<!DOCTYPE faces-config PUBLIC
  "-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.1//EN"
  "http://java.sun.com/dtd/web-facesconfig_1_1.dtd"[
<!ELEMENT region-jsp-ui-def (#PCDATA)>

<!ELEMENT required (#PCDATA)>
]>
<faces-config xmlns="http://java.sun.com/JSF/Configuration">
  <component>
    <component-type></component-type>
    <component-class></component-class>

    <component-extension<
      <region-jsp-ui-def></region-jsp-ui-def>
    </component-extension>
  </component>
</faces-config>

Для регистрации подготовленной страницы в файле областей повторного использования необходимо внести следующие исправления (дополнения). Установить тип компонента - это идентификатор страницы, используя который можно сослаться на фрагмент из другого места (тег af:region). Класс компонента (имеется в виду Java-класс, который реализует функционал области повторного использования) - он всегда должен быть oracle.adf.view.faces.component.UIXRegion. Путь к файлу, содержащему фрагмент страницы. В итоге заготовка должны выглядеть следующим образом:

<component>

<component-type>region.fragment</component-type>
<component-class>oracle.adf.view.faces.component.UIXRegion</component-class>
  <component-extension>
    <region-jsp-ui-def>/region/fragment.jspx</region-jsp-ui-def>
  </component-extension>

</component>

Остался последний шаг - создание страницы, в которую необходимо поместить повторно используемую область (ранее разработанный фрагмент). Создаем
пустую JSF страницу (типа JSP Document - *.jspx). Открываем исходный код страницы и вставляем руками тег af:region:

<af:region id="fragment1" regionType="region.fragment" value="/>

Где regionType соответствует типу, описанному в файле регистрации фрагментов. Следующим важным моментом является определение значения атрибута value. Он указывает на привязки страницы, являющейся фрагментом. Значение атрибута value можно установить с
помощью мастера (Region Properties -> Advanced Properties ->General-Value-Bind). В мастере в узле ADF Bindings -> data перечислены все привязки существующих страниц. В данном случае надо выбрать привязку data.region_fragmentPageDef (рис. 3.)


Рис.3. Выбор привязки

В итоге тег af:region приобретет следующий вид:

<af:region id="fragment1"regionType="region.fragment"
                    value="#{data.region_fragmentPageDef}"/>

Осталось только проверить результаты работы, запустив приложение во встроенном J2EE контейнере.

2. Единое оформление страниц приложения (брэндинг)

В данном разделе рассмотрим один из подходов к единообразному (шаблонному) оформлению всех страниц приложения. Так как все страницы приложения должны реализовывать один шаблон, то почему бы не использовать механизм повторного использования? Действительно, разработав законченные функциональные фрагменты можно их использовать в других страницах, просто ссылаясь на них. Вначале рассмотрим шаблон один из шаблонов страницы (на примере шаблона, предлагаемого компанией Oracle для своих приложений, см. рис. 4).


Рис.4. Шаблон страницы

Очевидно, что страницу можно разбить на некоторые функционально законченные области (см. рис.5).


Рис.5. Разбиение страницы на области

Будем использовать следующие области (в соответствии с наименованиями фасетов):


  1. appAbout
  2. appCopyRight
  3. appPrivacy
  4. branding
  5. brandingApp
  6. menu1
  7. menuGlobal

Создадим одноименные страницы, типа JSP Document (*.jspx) и зарегистрируем их в файле META-INF/region-metadata.xml. И вставим
ссылки на них в соответствующие фасеты создаваемой страницы (например, index.jspx).
Как уже упоминалось в первом разделе, существует декларативный способ настройки фрагментов через передачу им параметров. Рассмотрим фрагмент menu1.jspx. При определении области можно для нее можно установить привязку к аргументам с помощью атрибута var, а затем внутри области обращаться к этой переменной привязки. Фрагмент состоит из меню закладок и для закладок проводится анализ, какая из страниц на данный момент активна: home или content, в зависимости от этого одна из закладок приобретает статус "выбрана".

<af:regionDef var="menu1Attr">

  <af:menuTabs binding="#{backing_region_menu1.menuTabs1}" id="menuTabs1">
    <af:commandMenuItem text="Home"
                            binding="#{backing_region_menu1.goMenuItem1}"
                            selected="#{menu1Attr.selectedTab == 'home'}"
                            id="goMenuItem1" action="home"/>
    <af:commandMenuItem text="Content"
                            binding="#{backing_region_menu1.commandMenuItem1}"
                            selected="#{menu1Attr.selectedTab == 'content'}"
                            id="commandMenuItem1" action="content"/>
  </af:menuTabs>
</af:regionDef>

Следует отметить, что атрибут selectedTab, адресующийся относительно переменной menu1Attr, определен в файле регистрации фрагментов:

<component>

  <component-type>branding.menu1</component-type>
  <component-class>oracle.adf.view.faces.component.UIXRegion</component-class>
  <attribute>
    <attribute-name>selectedTab</attribute-name>

    <attribute-class>java.lang.String</attribute-class>
  </attribute>
  <component-extension>
    <region-jsp-ui-def>/region/menu1.jspx</region-jsp-ui-def>
  </component-extension>

</component>

А декларативное присвоение статуса "выбран"определяется на каждой конкретной странице (например, index.jspx):

<f:facet name="menu1">
  <af:region id="nemul" regionType="branding.menu1">
    <af:attribute name="selectedTab" value="home"/>
  </af:region>
</f:facet>

Применение стилей для оформления страниц можно найти поссылкам:

Заключение

ADF 10g предоставляет простые и мощные средства для повторного использования ранее разработанных фрагментов страниц, декларативной их настройкой и быстрой разработки страниц в соответствии с корпоративными правилами оформления приложений.
Архив рабочего пространства можно взять здесь j2ee-adf-branding.zip

Ссылки по теме


 Распечатать »
 Правила публикации »
  Написать редактору 
 Рекомендовать » Дата публикации: 06.02.2009 
 

Магазин программного обеспечения   WWW.ITSHOP.RU
Oracle Database Personal Edition Named User Plus Software Update License & Support
Oracle Database Personal Edition Named User Plus License
Oracle Database Standard Edition 2 Processor License
Oracle Database Standard Edition 2 Named User Plus License
IBM DOMINO COLLABORATION EXPRESS AUTHORIZED USER LICENSE + SW SUBSCRIPTION & SUPPORT 12 MONTHS
 
Другие предложения...
 
Курсы обучения   WWW.ITSHOP.RU
 
Другие предложения...
 
Магазин сертификационных экзаменов   WWW.ITSHOP.RU
 
Другие предложения...
 
3D Принтеры | 3D Печать   WWW.ITSHOP.RU
 
Другие предложения...
 
Новости по теме
 
Рассылки Subscribe.ru
Информационные технологии: CASE, RAD, ERP, OLAP
Новости ITShop.ru - ПО, книги, документация, курсы обучения
Программирование на Microsoft Access
CASE-технологии
СУБД Oracle "с нуля"
Все о PHP и даже больше
Утиль - лучший бесплатный софт для Windows
 
Статьи по теме
 
Новинки каталога Download
 
Исходники
 
Документация
 
 



    
rambler's top100 Rambler's Top100