Это руководство описывает, как создать ADF task flows, которые создают навигацию, инкапсуляцию, повторное использование, управление компонентом жизненного цика, и транзакции в приложениях. Она включает в себя основные шаги для создания диаграмм task flows, добавив деятельности и контроль потоков в ней, и запуск готового потока задач.
В этом учебнике, вы создаете два bounded
task flow с различными компонентами в нем. Используя маршрутизатор, чтобы
определить направление, просмотр данных, и возврат для выхода потоков,
вы разработаете потоки задач, чтобы быть в состоянии
поддерживать функции поиска и обновления. Вы свяжете компонент view с
контролем данных. Вы определите управляемый бин(managed
bean) для обработки пароля. Вы определите правила для
маршрутизатора, когда пароль проверяется позволяя вам вход в приложение. Вы
создадите JSF-Страницу, и привяжете поток задач как регион в JSF-странице,
создадите параметр значение для имени пользователя.
-
В навигаторе Приложений, нажмите кнопку New Application. Другой вариант заключается в использовании File->New... меню для создания нового приложения.
-
В New Gallery, выберите Fusion Web Application (ADF) . Приложение состоит из двух проектов, один для модели данных (ADF-Business Components) и другой для view controller компонентов (ADF Faces and ADF Task Flows)
-
В диалоговом окне Create Fusion Web Application указать Name TaskFlow. Обратите внимани на изменения директории, в соответствии с новым именем. Вы можете изменить C:\JDeveloper\mywork часть пути, чтобы создать ваши файлы в другом меспе.
В поле Application Package Prefix установите значение demo. В Application Templates выберите Fusion Web Application (ADF) и нажмите кнопку Finish.
панель Overview отображает Контрольный список, что вы можете использовать в качестве руководства для разработки Fusion Web-Приложений.
Контрольный список по умолчанию отображается, когда Fusion Web-приложение создается.
-
В Application Navigator вы увидите два новых проекта. По умолчанию правила именования для этих проектов являются Model для одного и ViewController для другого.
-
Мы начнем создавать компоненты модели с помощью CheckList Overview. Нажмите на шаг Connect to a Database.
-
Нажмите на Create a Database Connection.
-
Указать следующие свойства для нового соединения, что вы создаете:
Введите Настройки Oracle JDBC чтобы надлежащим образом указать хост, порт и SID для вашей базы данных. Нажмите на Test Connection и убедитесь, что вы получили success.
Когда закончите, нажмите OK.
-
В Перечень панели, установите статус Connect to a Database шаг к Done.
-
Нажмите на Build Business Services шаг (расширить его), а затем нажмите кнопку Go to Sub steps.
-
В подменю списка задач, нажмите вкладку Create Entity Objects and Associations.
Затем щелкните на Create Entity Objects and Associations кнопку.
-
В диалоговом окне Select Project for Action, выберите проект Model.
Нажмите кнопку OK. -
В диалоговом окне Initialize Business Components Project должно быть выбрано HRConn соединение. Затем нажмите кнопку OK.
-
На странице Entity Objects, щелкните по Query кнопка для изучения данных доступных таблиц.
-
Выберите EMPLOYEES в списке Available , и нажмите кнопку со стрелкой вправо , чтобы переместить выбранные параметры для списка Selected. Этот шаг создает обновляемые Entity Objects на основе таблиц, которые вы выбираете
Затем нажмите кнопку Next, чтобы продолжить. -
В диалоге Updatable View Objects, переместите Employees (HR.EMPLOYEES) в список Selected . Этот шаг создает соответствующие view objects для выполнения запросов на entity-объекты, созданные вами ранее.
Затем нажмите кнопку Next, чтобы продолжить. -
В диалоге Read Only View Objects, Нажмите кнопку Next, чтобы продолжить.
View Object - Oracle Application Development Framework (Oracle ADF) компонент, инкапсулирует SQL-запроcы и упрощает работу с результатами. Подробнее...
Существует несколько типов View Objects, которые вы можете создать в вашем проекте ADF Business Components<:
- Read-only Только для чтения, когда обновления данных не нужно (может быть также entity-based)
- Entity-based, на основе Entity-object, могут производить обновление данных
- Static data Статические данные, для данных, определенных самим объектом
- Programmatically, Программно наполненные объекты view.
View objects на основе Entity-object можно сконфигурировать для поддержки обновления таблиц, когда вы создаете View objects, которые сопоставляют их атрибуты с атрибутами одного или нескольких существующих объектов сущности (Entity-object). Сопоставленные entity-объекты сохраняется в качестве сущности для использования в целях определения для view object. Таким образом, View objects, основанные на Entity сотрудничают автоматически с Entity, позволяющих в полной мере обновлять данные модели. View objects основе Entity-object запрашивают данные, необходимые только для задачи клиента, и на основе его сопоставления(мапирования) с Entity автоматически проверяют и сохраняют изменения. Как и read-only view object, View objects на основе Entity инкапсулирует SQL-запрос, и может быть связан с иерархией master-detail, которая может быть использована в модели данных вашего приложения. -
В диалоге Application Module, нажмите кнопку Finish для создания бизнес-компонентов в проекте Model.
-
В списке Checklist, установите статус Create Entity Objects and Associations в Done. Затем щелкните на Close Step 3.
Примечание: Поскольку шаги 3.2, 3.3 и 3.4 также были завершены, мы могли бы также установить свой статус, в Done, но мы будем делать это на более высоком уровне. -
Установить статус Build Business Services в Done.
-
Работа по модели проекта выполняется. Расширьте проект Model , Application Navigator должен выглядеть следующим образом:
-
Нажмите на Save All значок в меню JDeveloper , или выберите File | Save All из меню.
Далее мы будем работать с проектом ViewController.
С TaskFlow приложением, загруженным в JDeveloper, вы создаете диаграмму bounded task flow включая views, и возвращаемые результаты. Чтобы сделать это, выполните следующие шаги:
-
В Application Navigator, нажмите правой кнопкой мыши на ViewController и выберите узел New из контекстного меню.
ADF bounded task flow используется для инкапсуляции данных для повторного использования части приложения. Подробнее...
Bounded task flow похож на Java-метода в том, что он:
- Есть единая точка входа
- Может принимать входные параметры
- Может генерировать возврат значений
- Имеет свою собственную коллекцию действий и контроль правил потока
- Имеет свою собственную память и продолжительность жизни управляемого бина ( page flow scope)
ADF bounded task flow состоит из своего собственного набора частных контроля правил потока ,деятельности, и управляемого бина. Вызывающая сторона не требует никакого внутреннего знания таких вещей как названия страницы, вызовы метода, дочерний bounded task flows, управляемые бобы и правила управления потока в рамках bounded task flow. Входные параметры могут быть переданы в bounded task flow, и выходные параметры могут быть розданы на выходе bounded task flow. Средства управления данными могут быть совместно использованы потоками задач.
-
В New Gallery, нажмите на Web Tier | JSF/Facelets и ADF Task Flow.
-
В диалоге Create Task Flow, введите emp-update-flow как File Name. Выбрать следующие флажки.
Затем нажмите кнопку OK.Property Значение Create as Bounded Task Flow Checked Create with Page Fragments Checked Create Train Checked -
Новая пустая схема показана и новая запись создается в Application Navigator.
-
Выберите View компонент из Component Palette и перетащите его на диаграмму.
Основной тип деятельности потока задач является представление, которое отображает JSF-страницу или фрагмент страницы. Подробнее...
Фрагмент страницы - JSF JSP документ, который представлен как содержание на другой странице JSF. Фрагменты страницы обычно используются в bounded task flow. Ограниченный поток задачи может быть добавлен к странице как регион(region). Это допускает повторное использование потоков задач и позволяет странице включать многократные регионы, каждый содержащий определенный поток.
Действие представления связано в метаданных с физическим фрагментом страницы или страницы JSF. Действие представления идентифицировано атрибутом идентификатора. Имя фрагмента страницы или страницы идентифицировано элементом <page> в метаданных потока задачи. ID операции представления и название страницы не должны быть одинаковы.
-
Измените имя по умолчанию для intro.
-
Создать новый view на диаграмме рядом с intro.
Переименовать его в search. -
Создать третий view на диаграмме.
Переименовать его update. Ваша диаграмма должна выглядеть как на рисунке ниже.
-
Сохраните работу.
Вместо того, чтобы представлять приложения, как один большой JSF page flow, вы можете разбить ее на коллекцию потоков заданий многократного использования. Каждый поток задач содержит часть навигационных диаграмм приложения. Узлы в потоках задачи - это действия. Узел Действие представляет собой простые логические операции, такие как отображение страницы, выполнение логики приложения, или вызов другого потока задач. Транзакции между действиями называются control flow cases - управление ситуацией потока.
Есть два типа потока задач ADF:
- Unbounded task flow- Неограниченный поток: Ряд действий, правил потока управления и управляемых бинов, которые взаимодействуют, чтобы позволить пользователю выполнять задачу. Неограниченный поток задачиADF состоит из всех действий и потоков управления в приложении, которые не включены ни в каком ограниченном потоке задач.
- Bounded task flow- Ограниченный поток: Специализированная форма потока задач, что, в отличие от неограниченного потока задач, имеет единственную точку входа и нуль или больше точек выхода. Он содержит свой собственный набор частных правил управления потоком, действий и управляемых бинов. Ограниченный поток задач ADF позволяет повторное использование, параметризацию, управление транзакциями и повторный вход.
Интро страница является отправной точкой этого потока задач, и вы увидите, как создать train в пределах страницы. Чтобы сделать это, выполните следующие шаги:
-
На схеме emp-update-flow, дважды щелкните на intro компонент для создания страницы.
В диалоге Create New JSF Page Fragment, нажмите кнопку OK , чтобы принять значение по умолчанию. -
Дизайн страницы открывается. Из Палитры Компонентов( Component Palette ), группы ADF Faces Common Components, выберите Train компонент и перетащите его на страницу конструктора.
Train представляет собой прогрессию связанных действий, которая ведет конечного пользователя к завершению задачи. Подробнее...
Конечный пользователь щелкает по серии остановок поезда, каждая остановка, соединяется с определенной страницей.
Дополнительный компонент Train Button Bar может быть добавлен. Он содержит кнопки, которые обеспечивают дополнительное средство переместиться назад и вперед через остановки. Этот компонент может использоваться в сочетании с компонентом Train, чтобы обеспечить многократные способы переместиться через остановки "поезда".
У каждого ограниченного потока задач может быть единственный только Train. Если bounded task flow логически включает многократные поезда, Вы должны добавить каждый поезд к отдельному bounded task flow.
В диалоге Bind Train, нажмите кнопку OK , чтобы принять значение по умолчанию.
-
Выберите Train Button Bar компонент и поместите его под Train компонент.
В диалоге Bind trainButtonBar, нажмите кнопку OK , чтобы принять значение по умолчанию. -
Из Палитры Компонентов, в ADF Faces группы Bind trainButtonBar, выберите Output Text компонент и поместите под Train Button Bar.
Откройте Инспектор свойств(Property Inspector), если уже не там (View | Property Inspector или используйте комбинацию клавиш [Ctrl] + [Shift] + [I]), и введите Welcome to the Employee updater в поле Value.
Страница должна выглядеть так: -
Сохранить все, а затем нажмите emp-update-flow, чтобы открыть диаграмму потока задач.
-
Дважды щелкните на компонент search view для создания страницы поиска.
-
В диалоге Create New JSF Page Fragment, нажмите кнопку OK , чтобы принять значение по умолчанию.
-
Дизайн страницы открывается. Из Палитры Компонентов, в ADF Faces группе Common Components, выберите Train компонент и перетащите его на страницу конструктора.
В диалоге Bind Train, нажмите кнопку OK , чтобы принять значение по умолчанию. -
Выберите Train Button Bar компонент и поместите его под Train компонент.
В диалоге Bind trainButtonBar, нажмите кнопку OK , чтобы принять значение по умолчанию. -
Сохранить все, а затем нажмите вкладку emp-update-flow, чтобы открыть диаграмму.
-
Дважды щелкните на update для создания обновлений страницы.
-
В Create New JSF Page Fragment, нажмите кнопку OK , чтобы принять значение по умолчанию.
-
Дизайна страницы. Из Палитры Компонентов, в ADF Faces Common Components, выберите Train компонент и перетащите его на страницу конструктора.
В Bind Train, нажмите кнопку OK , чтобы принять значение по умолчанию. -
Выберите Train Button Bar компонент и поместите его под Train компонент.
В Bind trainButtonBar, нажмите кнопку OK , чтобы принять значение по умолчанию. -
Нажмите на Save All значок, чтобы сохранить приложение.
Страницы Поиск и Обновление необходимо связать с контролем данных компонентов. Поиск для запроса служащих по любой колонке критерия и Обновление - для отображения и обновления заработной платы работников. Чтобы сделать это, выполните следующие шаги:
-
Нажмите на вкладку search, чтобы открыть страницу.
-
В Application Naviator откройте the Data Controls аккордеон и раскройте следующие узлы AppModuleDataControl | EmployeesView1 | Named Criteria и перетащите All Queriable Attributes на эту страницу.
Управление данными (data control) - по существу мост, который данные из источника делает доступными ADF Fusion Web Application. Подробнее...
По умолчанию, для всех бизнес-компонентов, управление данными создается, чтобы запросить все атрибуты в объекте представления(view object). Data Control помещенный на страницу, позволяет данным быть выведеными на экран с помощью выходных компонентов.
Вы можете использовать объекты в управлении данными, чтобы создать связанные компоненты пользовательского интерфейса данных. Наиболее часто используемые типы средств data control:
ADF Business Components : Этот тип управления данными сгенерирован JDeveloper, когда Вы создаете модуль приложения в своем приложении Бизнес-компонентов ADF.
JavaBean : Этот тип управления данными получает структуру данных от POJO (plain old Java objects - простые объекты Java) .
EJB : Управление данными EJB - по существу то же, что управление данными JavaBean, за исключением того, что для получения данных использует функции, свойственные архитектуре EJB.
Web Service : Управление данными Веб-сервиса получает структуру данных от WSDL.
Из pop-up меню, выберитеCreate | Quick Query --> ADF Quick Query with Table.Быстрая форма поиска(Quick Query) предназначена, чтобы использоваться в ситуациях, где единственный поиск будет достаточен вполне или как начальная точка, чтобы развиться в полный поиск. Подробнее...
И Query и Quick Query формы поиска - компоненты ADF Faces. У быстрой формы поиска Quick Query есть одно поле критериев поиска с выпадающим списком доступных для поиска атрибутов из связанного набора данных. Как правило, доступные для поиска атрибуты - все атрибуты в связанном объекте представления( View object ).
Вы можете исключить атрибут, устанавливая его свойство Display Hint в Hide на странице Control Hints диалогового окна Edit Attribute. Пользователь может искать по выбранным атрибутам или искать по всем выведенным на экран атрибутам. Тип поля критериев поиска будет автоматически соответствовать типу своего соответствующего атрибута. Ссылка Advanced(Расширенный), встроенная в форму, предлагает Вам опцию создать управляемый бин(managed bean), для переключения из быстрого поиска в режим расширенной формы поиска.
-
В окне Edit Table Columns, выберите параметры Single Row Selection и Enable Sorting.
Затем нажмите кнопку OK. -
Страница должна выглядеть следующим образом:
-
Нажмите вкладку update, чтобы открыть страницу.
-
Из панели Data Controls, выберите AppModuleDataControl | EmployeesView1 затем перетащите его на страницу update.
-
Из всплывающего меню выберите вариант Create | Form --> ADF Form.
"Бросание" объекта как Form из панели Data Controls имеет тот же эффект как бросание единственного атрибута, кроме того что... Подробнее...
... создаются множество компонентов UI с привязкой к атрибутам. Атрибуты на компонентах UI (таких как value) связаны со свойствами на объекте того атрибута (такими как inputValue) или со значениями набора control hints на соответствующем бизнес-объекте.
Когда Вы перетаскиваете атрибут или объект на страницу JSF и бросаете его как компонент UI, среди прочего, для страницы создается файл определения страницы(если еще не существует). Создается и добавляется привязка для итератора и атрибутов в файл определения страницы. Дополнительно, необходимый код страницы JSPX для компонента UI добавляется в страницу JSF.
-
На Edit Form Fields выберите последние 3 строки (CommissionPct, ManagerID и DepartmentId) и нажмите на Delete для удаления полей. Затем выберите вариант Include Submit Button и нажмите OK.
-
В Палитре Компонентов(Component Palette), выберите Button перетащите и поместите его рядом с кнопкой Submit.
-
В Инспекторе свойств( Property Inspector) Cancel (Отмена) в поле Text для кнопки.
-
Страница должна выглядеть следующим образом:
-
Нажмите на значок Save All, чтобы сохранить приложения.
Чтобы закончить транзакцию, Вы можете или использовать действие return, или
Вы можете использовать кнопку, связанную с операцией action. Если возможно,
используйте действие return потока задачи. Действие return потока будет
фиксировать(commit) все данные, используемые в представлениях на потоке задач
ADF. Это также упрощает видеть, где Ваше приложение делает commit и rollback, и
поэтому проще его поддерживать. Чтобы реализовать действия return для
управления транзакциями, выполните следующие шаги:
-
Нажмите на emp-update-flow, чтобы открыть диаграмму задачи.
-
Нажмите на вкладку Overview , затем выберите Behavior (Поведение) вкладку.
-
В группе Transaction , установите следующие свойства из списка: Always Begin New Transaction (Всегда Начинать Новые Операции).
Транзакция - сохраненный набор действий, которая может фиксироваться или откатываться только полностью как группа действий. Подробнее...
Вы можете использовать ограниченный поток задачи( bounded task flow ), чтобы представлять транзакцию и декларативно управлять ее границами. Например, регистрация клиента и поток задач регистрации сотрудника могут быть реализованы с использованием действий return потока задачи. Кнопка Cancel реализовала бы откат - rollback в потоках задачи. Кнопка Save тогда использовалась бы для фиксации - commit.Таким образом, обновление каждого служащего рассматривается как единый ряд детализации сделки.
-
Снова на диаграмме, выберите компонент Task Flow Return и бросьте его под update.
Переименуйте его commit.
-
Снова выбрать компонент Task Flow Returnи бросьте его под update, но переименуйте его в rollback. .
-
Выберите компонент Control Flow Case из Палитры Компонентов и нажав на update, перетащите его в commit return.
Переименуйте его commit.
-
Выберите компонент Control Flow Case из Палитры Компонентов и нажав на update, перетащите его в rollback return. Переименуйте его rollback.
-
Диаграмма задач должна выглядеть следующим образом:
-
Выберите commit return компонент и в инспекторе свойств, во вкладке Behavior, в End Transaction выберите commit из списка значений.
-
Повторите ту же операцию, выбрав rollback return и выберите rollback из списка End Transaction.
-
Нажмите на Save All значок, чтобы сохранить приложения.
-
Нажмите на вкладку update, чтобы открыть страницу дизайна , и выберите кнопку Submit.
В Инспекторе свойств, в поле Action, выберите commit из списка.
-
Выберите кнопку Cancel.
В Инспекторе свойств, в поле Action, выберите rollback из списка.
-
Нажмите Save All, чтобы сохранить приложение.
Мы хотим ограничить доступ к приложению через процесс регистрации. Мы создаем странице входа в систему, маршрутизатор, страницу с сообщением об ошибке и ранее созданный поток задач. Чтобы создать этот поток задач, выполните следующие действия:
Например, JDeveloper, по умолчанию создает пустой неограниченный поток задачи (имя исходного файла adfc-config.xml), когда Вы создаете Fusion веб-приложение, используя шаблон Fusion Web Application. Во время выполнения Fusion веб-приложение может вызвать ограниченный поток исходя из действий, которые Вы добавили в этот неограниченный поток.
Как показано ниже, первое действие, которое выполнится в приложении, часто является действием view в неограниченном потоке задач. Действие view представляет страницу JSF, которая выводится на экран как часть приложения. Действие запускается с представления Home и затем вызывает ограниченный поток задач. calltoLogin_taskFlow действие вызывает ограниченный поток задач, который позволяет пользователю зарегистрироваться в приложении.
Вы можете также разработать приложение, в котором все действия находятся в неограниченном потоке. Это подражает Struts или приложению JSF, но не использует в своих интересах функциональность ограниченных потоков задач ADF. Чтобы в полной мере воспользоваться функциональностью потоков задачи, используйте ограниченные потоки задачи ADF.
-
В Application Navigator, нажмите правой кнопкой мыши на ViewController и выберите узел New из контекста.
-
В New Gallery, нажмите кнопку Web Tier | JSF и ADF Task Flow. Затем нажмите кнопку OK.
-
В Create Task Flow, введите security-flow как File Name. Выберите флажки Create as Bounded Task Flow и Create with Page Fragments.
Нажмите кнопку OK. -
Новая пустая диаграмма появится и новая запись в Application Navigator.
-
Выберите компонент View из Палитры Компонентов и перетащите его на диаграмму.
Переименовать в login.
-
Выберите компонент Router (Маршрутизатор ) и поместите его рядом с login.
Вы можете использовать действие маршрутизатора, чтобы декларативно направить управление к действиям на основе логики, определенной в выражении EL. Подробнее...
Каждый поток управления может соответствовать различному условию(case) маршрутизатора. Каждый case маршрутизатора содержит следующие элементы, которые используются, чтобы выбрать действие, к которому направлено управление. Первое выражение, которое возвращает true, используется, чтобы определить соответствующий результат.
выражение(expression): Оценка выражения EL либо true, либо false, например, #{(pageFlowScope.welcomeUserRegistrationBean.userSelection eq 'Customer')}
результат(outcome): значение, возвращаемое маршрутизатором, если EL выражение принимает значение true, например, newCustomer. Если результат соответствует from-outcome на control flow case(управление условием потока), управление переходит к действию, на которое указывает этот control flow case.
Если ни одно из условий маршрутизатора не вычисляется в true, или если никакое условие не определено, используется результат, указанный в маршрутизаторе по умолчанию (default outcome).
-
Выберите emp-update-flow в Application Navigator, а затем перетащите его на диаграмму ниже router.
-
Выберите значок View из палитры компонентов, затем перетащите его на диаграмму.
Переименовать в error.
-
Выберите Control Flow Case и нажав на login , перетащите в router.
-
Повторите предыдущую операцию от router к error.
Переименовать поток в bad.
-
Повторите предыдущую операцию от router к emp-update-flow.
Переименовать его в good. -
Повторите предыдущую операцию от router к login.
Переименовать в login. Ваша схема должна выглядеть следующим образом: -
Второй поток задач завершен. Сохраните приложение.
Мы создаем страницу входа в систему с полем пароля, затем мы создаем backing
bean для значения пароля. Затем маршрутизатор, в зависимости от значения пароля,
приводит к странице error или к потоку emp-update. Чтобы создать страницы
и реализовать правила маршрутизатора, выполните следующий шаг:
-
В диаграмме, дважды щелкните на login для создания страницы. В Create New JSF Page Fragment нажмите OK , чтобы принять значения по умолчанию.
-
В Палитре Компонентов, перетащите элемент Input Text на страницу login ( login.jsff ).
Введите password (пароль) в качестве метки label.
-
Во вкладке Advanced, рядом с полем Binding, выберите Edit из раскрывающегося списка.
В окне Edit Property нажмите кнопку New кнопка для создания Managed Bean, который будет управлять значением пароля.
Managed beans ( управляемые бины )- классы Java, которые Вы регистрируете в приложении, используя различные конфигурационные файлы. Подробнее...
Когда приложение JSF запускается, оно анализирует эти конфигурационные файлы, и бины, перечисленные в них, делаются доступными. На Managed beans можно сослаться в выражении EL, предоставляя доступ к свойствам и методам бинов. Каждый раз, когда на управляемый бин ссылаются впервые, и он уже не существует, Managed Bean Creation Facility инстанцирует бин, вызывая метод конструктора по умолчанию на нем. Если объявлены какие-либо свойства, они заполненяются объявленными значениями по умолчанию.
Используйте управляемые бины, чтобы хранить логику, которая связана с только с видимым интерфейсом пользователя. Все данные приложения и обработка должны быть обработаны логикой в деловом уровне приложения. Подобно тому, как Вы храните связанную с данными логику в базе данных, использующей PL/SQL, а не в классе Java, веб-приложение Fusion должно хранить связанную с бизнесом логику на среднем уровне. Таким образом, Вы можете представить эту логику как методы бизнес-сервиса, которые могут тогда стать доступными для уровня ADF Model и быть доступными для привязки данных.
В диалоговом окне Create Managed Bean, введите следующие значения:
Свойство Значение Bean Name backing_login Class Name backing_login Package backing Extends java.lang.Object Scope request Generate Class If It Does Not Exist (отметить)
Нажмите кнопку OK.
-
Edit Property: щелкните New , расположенную рядом с Property.
В окне Create Property, введите password в Property Name.
-
Узел Advanced, в Инспекторе свойств, для компонента ввода текста должен выглядеть следующим образом:
Обратите внимание, что для реалистичного поля пароля, вы должны также установить Advanced | Visible в false, чтобы скрыть пароль. -
Перетащите компонент Button под поле ввода пароля.
Изменить Text в login. -
Нажмите вкладкку security-flow, чтобы открыть схему и добавить Control Flow от страницы error к странице login и назовите его login.
Затем выберите router. -
В Инспекторе свойств для router, выберите bad из раскрывающегося списка как результат по умолчанию.
В Cases нажмите на Add , чтобы создать условия. -
В поле Expression выберите Expression Builder( Конструктор Выражений).
Раскройте следующие узлы ADF Managed Beans | backing_login | password и выберите переменную value, а затем выберите операнд '==' и напечатайте 'oracle'.
Нажмите кнопку OK.
В этом примере у нас закодирован oracle как жестко запрограммированное (hard coded) значение для пароля.
-
Еще в Инспекторе свойств выберите good как результат, так что, если пароль, введенный равен oracle, поток проходит через поток "good" в поток emp-update, в противном случае на страницу error .
-
Теперь нам нужно создать параметр для работы управляемого значения свойства. В диаграмме security-flow, нажмите вкладку Overview, затем вкладку Parameters.
Вызванный ADF bounded task flow, может принять входные параметры и может передать возвращаемые значения к вызывающей стороне на выход. Подробнее...
Чтобы передать входной параметр к ограниченному потоку задач, Вы должны определить один или больше:
- Входные параметры на действие task flow call. Они определяют, где вызванный task flow сохранит значения параметров.
- Определения входных параметров на вызванном bounded task flow. Они определяют, где вызванный ограниченный поток задач может получить значения параметров.
Входное название параметра, определенное для каждой опции, будет тем же, чтобы соответствовать входным значениям параметров в вызванном bounded task flow. Значение для каждого соответствует тому значению, что будет получено в вызывающей стороне и вызванном потоке задачи. Если Вы не определяете значение для входного параметра, значение по умолчанию #{pageFlowScope.parmname}, где parmname - имя Вашего параметра.
Вы можете уточнить в определении входного параметра( Input Parameter Definitions ) для вызванного bounded task flow, обязателен ли входной параметр. Если обязательный входной параметр не получен, происходит ошибка (которая отмечена во время проектирования, а также во время выполнения). Параметра, который идентифицирован как не требуемый, может быть проигнорирован во время создания действия вызова потока задачи. По умолчанию все объекты переданы ссылкой. Входные параметры действия task flow могут быть переданы ссылкой, только если переданы управляемые объекты бина, а не отдельными значениями. По умолчанию типы примитивов (например, int, long, или boolean) переданы значением.
-
В Input Parameter Definitions, нажмите кнопку Add .
-
Установите для этого параметра значения из таблицы ниже, затем сохраните все.
Свойство Значение Name username Class java.lang.String Value (авто заполнение) Required (Отмечен) -
Нажмите на login.jsff закладку, чтобы открыть страницу,и перетащите и бросьте компонент Output Text выше password input text.
-
В Инспекторе свойств выберите Expression Builder... из списка поля Value.
В JSF Вы используете простой язык выражения (названный EL), чтобы связать с информацией, которую Вы хотите представить и/или изменить. Подробнее...
Выражения в качестве примера похожи на #{userInfoBean.principalName}, чтобы сослаться на имя определенного пользователя или #{userInfoBean.principalName eq 'SKING'}, чтобы оценить, является ли имя пользователя SKING или нет. Во время выполнения универсальное средство анализа выражения возвращает String и булево значение этих соответствующих выражений, автоматизируя доступ к отдельным объектам и их свойствам, и не требуя кода.
Во время выполнения значение определенных компонентов JSF UI определено атрибутом значения. В то время как у компонента может быть статический текст как его значение, обычно атрибут значения будет содержать привязку, которая является выражением EL, которое инфраструктура времени выполнения оценивает, чтобы определить какие данные вывести на экран. Например, outputText компонент, который выводит на экран имя пользователя, кто в настоящее время входит в систему, может иметь в значении атрибута выражение #{userInfoBean.principalName}. Так как любму атрибуту компонента может быть присвоено значение, используя выражение EL, просто создать динамические, управляемые данные пользовательского интерфейса. Например, Вы могли бы скрыть компонент, если пользователь не зарегистрирован, при помощи выражения булевой переменной #{userInfoBean.principalName!=null} в атрибуте "rendered" компонента UI. Если нет никакого principalName в текущей сущности userInfoBean, представленный атрибут оценивается как false, и компонент исчезает со страницы.
-
В Expression Builder убедитесь в том, чтобы очистить поле expression, затем разверните ADF Managed Beans | pageFlowScope и выберите username.
Затем нажмите кнопку OK. -
Нажмите вкладку security-flow, чтобы открыть схему-диаграмму и дважды щелкните на error с целью создания страницы.
В диалоге Create New JSF Page Fragment, нажмите кнопку OK , чтобы принять значение по умолчанию.
-
Из Палитры Компонентов, перетащите элемент Output Text на страницу.
В Инспекторе свойств введите Error, wrong password( Ошибка, неверный пароль ) в поле Value.
-
В Design, нажмите клавишу Enter чтобы добавить новую строку и перетащите компонент Button под текст ошибки.
В Инспекторе свойств, измените Text в Retry( Повторить ) и из списка выберите login как action.
-
Нажмите на Save Al, чтобы сохранить приложение.
Для создания JSF Страницы, которая использует поток задач, выполните следующие действия:
-
Щелкните правой кнопкой мыши на ViewController узел в Application Navigator и выберите New из контекста.
-
В New Gallery, выберите Категорию Web Tier и JSF/Facelets пункт Page .
Затем нажмите кнопку OK. -
В окне Create JSF Page, введите master в качестве File Name и отметив Page Template выберите Oracle Three Column Layout.
Затем нажмите кнопку OK. -
Прокрутите туда сюда, чтобы увидеть текущую веб-страницу в редакторе.
-
Из Палитры Компонентов, перетащите элемент Output Text компонент на start facet.
Измените Value на Welcome в Инспекторе свойств.
-
В ViewController | Web Content | WEB-INF узле, перетащите security-flow.xml на Facet center.
Выберите Регион из меню.
Вы можете представить ограниченный поток задачи во фрагменте страницы или страницы JSF (.jsff) при помощи региона ADF. Подробнее...
Регион ADF включает в себя следующее:
- af:region тэг, который появляется на странице или фрагменте страницы, где вы отображаете регион
- Экземпляр объекта, реализующего RegionModel из следующего пакета: oracle.adf.view.rich.model
- Привязка потока задач(task Flow) в определении страницы, которая идентифицирует bounded task flow для региона ADF
.
При первом появлении, содержание региона ADF - содержание первого действия представления в ограниченном потоке задачи. Действия представления, используемые в ограниченном потоке задачи, должны быть связаны с фрагментами страницы, а не страницами. Вы можете передать значения в регион ADF, используя поток задачи, связывающий входные параметры или контекстные события. Кроме того, Вы можете сконфигурировать свойство parametersMap, чтобы определить, какие входные параметры привязка потока задачи передает из ограниченного потока задачи в регион ADF.
Регионы ADF могут быть сконфигурированы так, чтобы Вы определили, когда регион активируется или обновляется. Вы можете также сконфигурировать регион ADF и bounded task flow так, чтобы управление навигацией остановилось в bounded task flow и передалось странице, которая содержит регион ADF. Наконец, Вы можете создать динамические регионы (ADF dynamic regions), где привязка потока задачи определяется во время выполнения, что именно bounded task flow отображает в регионе, и сконфигуровать динамическую ссылку региона так, чтобы конечные пользователи могли изменить bounded task flow, который отображается в динамическом регионе ADF во время выполнения.
В Edit Task Flow Binding, в поле Value введите #{'Scott'}.
-
Главная страница должна теперь выглядеть следующим образом:
-
Нажмите на Save All значок, чтобы сохранить приложение.
Теперь, когда поток задач интегрирован как регион главной страницы, вы можете запустить его. Чтобы сделать это, выполните следующие шаги:
-
В редакторе страницы master, щелкните правой кнопкой мыши и выберите Run из контексного меню..
-
Страница загружается в ваш браузер, отображающий имя переменной (Scott) и, ожидая ввод пароля.
-
Попробуйте ввести неправильный пароль (который отличается от oracle).
Затем щелкните на login кнопку. Маршрутизатор переведет к странице error. -
Нажмите на кнопку Retry для входа в систему с правильным паролем.
-
Снова на странице входа, введите oracle в качестве пароля.
Затем нажмите кнопку login.
-
Новая страница будет отображать train.
-
На новой странице нажмите кнопку Next или кнопку train.
-
На втором этапе train, на странице поиска, выберите LastName.
Введите A% в поле поиска, для получения всех работников, имя которых, начинается с A .
Нажмите на search кнопку. -
В возвращаемом списке, выберите одного сотрудника и затем нажмите кнопку Next.
Вы можете свернуть панель Search, пока вы не готовы ввести новые критерии. -
На странице Edit для выбранного сотрудника, обновите заработную плату, затем нажмите Submit.
-
Приложение возвращает вас на страницу login.
-
Вернитесь в JDeveloper и откройте Database Navigator (если ее не видно, используйте View | Database | Database Navigator).
-
Расширьте TaskFlow | HRConn | Tables узлы и дважды щелкните на таблице Employees , чтобы открыть ее.
-
Нажмите Data
Нажмите Sort... -
Чтобы получить более легко информацию о сотруднике, которого вы ищете, вы можете использовать поле Filter или использовать операцию Sort. Нажмите на кнопку Sort, и в окне Sort Columns, переместите LAST_NAME в список Selected Columns.
Затем нажмите кнопку OK. -
Найдите сотрудника, у которого вы обновили заработную плату, чтобы убедиться, что обновление совершено с новым значением.
-
Вы можете повторить этот последний процесс, чтобы проверить действие Cancel (rollback).
Вы успешно завершили этот учебник.
- Создавать Компоненты Модели
- Создать диаграммы bounded task flow
- Создавать страницы потоков задач
- Связывать страницы потоков задач для управления данными
- Устанавливать контроль транзакций потока задач
- Определять второй поток задач
- Определять компоненты потоков задач и правила маршрутизатора
- Создавать JSF-Страницы, и привязывать поток задач как Регион на страницу.
- Руководство Разработчика Fusion для Oracle ADF
- Руководство Разработчика Веб-Интерфейса Пользователя для Oracle ADF