Веб-приложения, как правило, имеют больше, чем одну страницу в них. В этой части урока вы сможете добавить еще одну страницу - страницу Поиска - для вашего приложения и использовать ADF Task Flow Diagrammer для определения правил навигации между двумя страницами. Вы сможете использовать характеристики ADF Faces Framework, чтобы добавлять дополнительную функциональность страниц. Наконец, вы создадите многоразовый фрагмент страницы и добавите его в страницу DeptEmpPage.
Это страница Поиска для приложения.
-
В Application Navigator найдите adfc-config файл в узле Page Flows в ViewController проекта. Дважды щелкните его, чтобы открыть его в редакторе. Это то, где вы собираетесь определить навигацию приложения .
-
Перетащите DeptEmpPage.jsf файл из Application Navigator в пустую диаграму adfc-config.
-
Из Палитры Компонентов (Component Palette) перетащите компонент View в диаграму adf-config, и переименуйте ее в query. Это по сути новые страницы JSF, который вы собираетесь создать.
-
Из Палитры Компонентов выберите Control Flow Case, а затем нажмите на DeptEmpPage и перетащите линию к странице query.
Дайте имя этой линии goQuery.
-
Из Палитры Компонентов, выберите другой Control Flow Case, и затем создайте противоположный поток от query к странице DeptEmpPage. Имя этого потока будет back.
-
Дважды щелкните на query на диаграмме, чтобы создать новую страницу. В диалоге Create JSF Page примите значение по умолчанию радио-кнопки Facelets , и с выбраннойрадио-кнопкой Quick Start Layout, нажмите кнопку Browse.
-
В Component Gallery, сохраните по умолчанию категорию One Column, тип и макет, но отметьте Apply Themes в Options панели.
Нажмите кнопку OK и OK снова для создания страницы.
-
Чтобы добавить функцию поиска сотрудников на странице, откройте дерево Data Controls, и найдите EmpDetails1. (Если вы не видите его, нажмите на кнопку Refresh ).
-
Раскройте EmpDetails1 и раскройте узел Named Criteria ниже его. Выберите All Queriable Attributes и перетащите на новую страницу query.jsf . Создать как Query > ADF Query Panel.
-
В Data Controls выберите контроль данных EmpDetails1 и перетащите его в центре страницы ниже компонента запроса. Создать как Form > ADF Form.
В окне Edit Forms Details отметить флажки Include Navigation Controls и Include Submit Button. Нажмите кнопку OK.
-
Для panelFormLayout не снимая выделения, используйте Property Inspector для установки Rows в 5.
-
В окне Structure найдите кнопку Submit, щелкните правой кнопкой мыши и выберите Insert after af:command:Button - Submit > Button.
-
В Инспекторе свойств изменить Текст новой кнопки на Back и для Action выберите back из раскрывающегося списка. Это обязывает кнопку выполнять навигацию, которую вы задали на диаграме потока страниц.
-
Затем вы добавляете операции транзакций на страницу, чтобы позволить вам делать commit и rollback изменении. В Data Controls расширьте модуль на уровне узла Operations для поиска операции commit и rollback. Перетащите Commit в окно Structure перед First Button. При появлении запроса, выбрать ADF Button.
-
Повторите те же действия для операции Rollback .
-
В Инспекторе свойств, для кнопок Rollback и Commit , сбросьте свойство Disabled в default чтобы сделать обе кнопки всегда доступными для выбора.
-
Дважды щелкните на вкладку Query.jsf, чтобы максимизировать страницы в Редакторе Дизайна(Design Editor). Ваша страница должна выглядеть следующим образом:
-
Нажмите на вкладку DeptEmpPage.jsf для переключения обратно на страницу. Быстрый способ навигации в этот или любой другой файл с помощью глобального поля поиска в верхнем правом углу JDeveloper, если набрать имя файла там.
Затем просто щелкните на имени файла, чтобы открыть его в редакторе.
-
В дизайне страницы, расширить аккордеон Departments . Из Палитры Компонентов, выберите компонент Button и перетащите его в аккордеон Departments между кнопками First и Previous . Альтернативно, вы можете щелкнуть правой кнопкой мыши на кнопку First и выберать "insert after > button", чтобы добавить новую кнопку.
-
С помощью Инспектора свойств изменить Текст кнопки на Query и Action на goQuery или выберите его из выпадающего списка, если имеется. Это обязывает кнопку для выполнения навигации, которую вы задали на странице схема.
-
Нажмите на значок Save All в JDeveloper меню, чтобы сохранить вашу работу, и затем нажмите правой кнопкой мыши на страницу DeptEmpPage.jsf и выберите Run.
-
Когда страница отобразится в браузере, щелкните на кнопку Query для перехода на новую страницу. На странице Поиска нажмите Advanced для отображения подробных критериев поиска.
-
В поле FirstName принять по умолчанию Starts with (Начинается с), и введите букву G.
Нажмите Search. В форме ниже, покажется запись для Guy Himuro. -
Экспериментируйте с формой, сохраняя ваши критерии поиска, создавая более сложные запросы и обновления данных сотрудников. Обратите внимание, как эта форма отображает представление данных, которое соответствует определению, содержащемуся в view object, созданному вами - в том числе информация о названии отдела, а также список значений для Job id и годовой заработной платы работника.
Вы также можете вносить изменения в данные и делать commit и rollback ваших транзакций по мере необходимости.
Когда вы закончите закройте окно браузера.
На следующих шагах вы познакомитесь с некоторыми из характеристик ADF Faces Framework. Вам предстоит улучшить ваши страницы с дополнительной функциональностью Ajax, используя декларативные возможности развития, предлагаемые ADF Faces компонентами.
Требования к приложению, означает, что вам нужно добавить автоматическое обновление AnnualSalary поле всякий раз, когда в Зарплата поле обновляется. Вы не хотите, чтобы вся страница обновлялась, когда это произойдет, но использовалось частичное обновление страницы, чтобы просто освежить те области, которые были изменены.
-
Откройте query.jsf файл в Редакторе Дизайна, если он еще не открыт. Выберите поле Salary. В Инспекторе свойств установите значение Id в sal.
-
Еще в Инспекторе свойств расширьте узел Behavior и установите AutoSubmit в True.
-
В окне Structure найдите поле AnnualSalary . (Другой вариант, чтобы попасть на это поле, дважды щелкните на query.jsf вкладку для максимизации окна, а затем найдите поле в Редакторе Дизайна).
Найдите свойство PartialTriggers в разделе Behavior (Поведение) и нажмите стрелку справа на выбор Edit. -
В окне диалога Edit Property найти поле Salary, переместите его вправо синей стрелкой. Нажмите кнопку OK.
-
Нажмите на Save All в JDeveloper меню, чтобы сохранить вашу работу, и запустите (run ) DeptEmpPage.jsf.
-
Когда страница отобразится, нажмите кнопку Query в панели Departments.
-
На странице Поиска ищите сотрудников, чье имя начинается с A%.
Обратите внимание на значения зарплаты и годового оклада.
-
Обновите поле Salary, а затем выйдите из него. Обратите внимание на немедленные изменения в поле AnnualSalary, как только вы покидаете поле Salary. Однако это единственное поле, которое обновляется (не вся страница).
-
Закройте браузер.
-
В странице query, выберите JobId поле. -
В Палитре Компонентов раскройте узел Operations, и найдите Auto Suggest Behavior в разделе Behavior. Перетащите Auto Suggest Behavior операцию на JobId поле.
-
В диалоге Insert Auto Suggest Behavior введите #{bindings.JobId.suggestedItems}. Нажмите OK.
-
Сохраните вашу работу, а затем запустите страницу query.
-
Введите 121 в поле EmployeeId, и нажмите кнопку Search. В записи для Adam Fripp обновите поле JobId, введя в нем 's' . Несколько рабочих мест, начинающиеся с 's' будут предложены.
-
Добавьте 'a' после 's' и смотрите, что список предложений изменен соответствующим образом.
-
Выберите Sales Representative из трех оставшихся вариантов, для заполнения поля.
-
Закройте браузер без сохранения изменений.
На этом этапе вы можете добавить раскрывающееся меню на странице и использовать пару ADF Faces компонентов операций, чтобы добавить Javascript операции на страницу - для экспорта табличных данных в таблицы Excel и для создания страницы печати.
-
В DeptEmpPage.jsf файле щелкните внутри фасетки menus в панели коллекции окружающую таблицу "Employees ". Щелкните правой кнопкой мыши и из контекстного меню выберите Insert Inside Facet menus > Menu.
-
В Инспекторе свойств установите Текст в My Options.
-
В Инспекторе свойств раскрыть узел Behavior и установить Detachable в true.
-
В окне Structure, щелкните правой кнопкой мыши компонент меню и выберите Insert inside af:menu - My Options > Menu Item.
-
В Инспекторе свойств установите свойство Текст нового пункта меню в Export to Excel.
-
С новым пунктом меню Export to Excel еще выбраным в окне Structure, расширьте раздел Listeners узла Операции в ADF Faces компонентах в Палитре Компонентов.
Найдите компонент Export Collection Action Listener и перетащите его на Export to Excel меню в окне Structure. -
В диалоговом окне Insert Export Collection Action Listener щелкните стрелку вниз рядом с ExportedId поле и выберите Edit.
-
В диалоговом окне Edit Property пройдите по структуре страницы, чтобы найти компонент table - t1 и выберите его. Нажмите кнопку OK.
-
Из выпадающего списка Type выберите excelHTML и нажмите кнопку OK.
-
Добавьте еще один пункт к меню. В окне Structure, щелкните правой кнопкой мыши на меню компонент Export to Excel и из контекстного меню выберите Insert After af:commandMenuItem - Export to Excel > Menu Item.
-
Установите свойство Текст этого нового меню в Printable Page..
-
В разделе Behavior под узлом Operations Палитры Компонентов выберите операцию Show Printable Page Behavior, чтобы добавить ее на новый пункт меню. Перетащите ее на новую опцию меню, созданную вами.
-
Нажмите на Сохранить Все в JDeveloper меню, чтобы сохранить вашу работу, и затем выберите Run.
-
Когда страница отображается, щелкните меню.
-
Затем вызывайте каждое из опции меню, что вы создали, например Export to Excel.
Вам, возможно, потребуется принять загрузку файла в окне браузера, чтобы иметь доступ к файлу Excel.
-
Попробуйте опции меню Printable Page.
Страница готова для печати.
Закройте окно браузера.
-
Нажмите на вкладку query.jsf для возврата на страницу Query, с открытой панелью "Structure ". В Data Controls раскройте узел EmpDetails1, а затем узел Operations ниже его. Выберите операцию CreateInsert .
-
Перетащите операцию CreateInsert из палитры "Структура" на panelGroupLayout в нижнюю грань( footer facet) формы сотрудников. Создайте ее как ADF Button.
-
В Инспекторе свойств установите Id кнопки в CreateInsert.
-
Еще в Инспекторе свойств раскройте узел Behavior и в PartialTriggers выбрать Edit из раскрывающегося списка.
-
В окне Редактирования прокрутите страницу компонентов, пока вы не найдете кнопку CreateInsert . Переместите ее в Selected.
Нажмите кнопку OK. Это действие определяет CreateInsert компонент в качестве триггера, который заставит таблицу обновиться.
-
Таким же образом добавьте операцию Delete, перетаскивая операцию Delete из EmpDetails1 на panelGroupLayout в низ страницы. Как и прежде, создайте ее как ADF button
-
Две кнопки отобразятся в нижней части страницы query.
-
Сохраните вашу работу, а затем запустите Query страницу.
-
Когда появится страница введите F% в поле LastName и нажмите кнопку Search. Первая запись F% работника будет показана.
-
Нажмите на кнопку CreateInsert. Страница обновися, и поля внизу будут очищены (за исключением поля HireDate, согласно установке по умолчанию на текущую дату), так что новая запись может быть вставлена.
-
В Application Navigator найдите demo.model пакет и щелкните правой кнопкой мыши, чтобы выбрать New View Object....
-
В мастере Create View Object установките Name в EmpByEmail и выберите SQL Query радио-кнопку в качестве источника данных. Нажмите кнопку Next.
-
В Шаге 2 мастера Create View Object , введите следующий запрос:
select first_name,last_name from employees where email=:p_emailЗнак ':' перед p_email означает, что она является переменной, которая будет передана в запрос.
Нажмите на кнопку Test and Explain, чтобы подтвердить ваш запрос.
Нажмите кнопку Close и нажмите кнопку Next.
-
В пункте 3 Create View Object мастера, нажмите кнопку New для создания новой bind переменной. Установите Name в p_email.
Нажмите на вкладку Control Hints и установите Label Text в Email или Электронный адрес.
-
Нажмите кнопку Next несколько раз, чтобы принять все по умолчанию, пока вы не достигнете 8 шага мастера.
Отметьте здесь флажок Add to Application Module, чтобы включить ваше новое представление в модель данных.
Нажмите Finish. -
Сохраните вашу работу, а затем запустите Business Component Browser, чтобы протестировать новый view. Дважды щелкните на новом view EmpByEmail1 и когда будет предложено вставить значение для переменной, введите SKING и нажмите OK чтобы получить результаты для этого адреса электронной почты.
Запуск Бизнеса Компонент Тестер. Подробнее... Щелкните правой кнопкой мыши на AppModule узел в Application Navigator и выберите Run из контекста.
-
Чтобы попробовать другое значение, нажмите кнопку Edit Bind Variables.
Закрыть Business Component Browser.
-
Сначала создадим новый поток задач, специально для этой страницы.
В Application Navigator нажать правой кнопкой мыши на проект ViewController и выбрать New... -
В Web Tier > JSF/Facelets выберите категорию ADF Task Flow (Поток Задач).
Нажмите кнопку OK.
-
В диалоговом окне Create Task Flow установить File Name в search-email-flow.xml.
Убедитесь, что флажки Create As Bounded Task Flow и Create with Page Fragments оба отмечены.Нажмите кнопку OK.
-
В Редакторе Дизайна перетащите компонент View из Палитры компонентов на пустую диаграмму и именуйте его searchEmail. Вы используете только одну страницу в этом потоке, но вы можете иметь потоки задач связанные с несколькими страницами и также включать их в другие JSF страницы.
-
Дважды щелкните на новом компоненте searchEmail для создания фрагмента страницы.
Примите значения по умолчанию в диалоговом окне, которое отображается, убедитесь, что имя файла searchEmail.jsff. Это создает страницу как фрагмент страницы, который может быть включен в другие JSF страницы. Нажмите кнопку OK. -
Пустая страница отображается в Редакторе Дизайна. Раскрыть аккордеон Data Controls и, если необходимо, щелкнуть на кнопку Refresh, чтобы убедиться, что новый контролер данных EmpByEmail появился в списке.
-
Раскройте новый EmpByEmail1 и узел Операции под ним. Выберите ExecuteWithParams операцию. Вы собираетесь использовать эту операцию, чтобы выполнить запрос к этому представлению, передавая ему необходимые параметры.
-
Перетащите операцию ExecuteWithParams на вашу новую страницу, и создайте его в качестве ADF Parameter Form.... -
В диалоговом окне Edit Form Fields измените display label для p_email от значения по умолчанию на Email. Нажмите кнопку OK.
-
В Редакторе Дизайна страницы, нажмите кнопку ExecuteWithParams кнопку и с помощью Инспектора свойств измените Текст на Find Details.
-
Из дерева Data Controls, перетащите EmpByEmail1 на страницу под кнопку. Создайте его в качестве Form > ADF Read-only Form...
-
Примите значения по умолчанию, представленные в диалоговом окне Edit Form Fields и нажмите кнопку OK. Сохраните вашу работу.
Страница должна выглядеть так:
-
Новый связанный поток задач теперь содержит фрагмент страницы; далее вы включите полностью связанный поток задач внутрь другой страницы JSF.
В Application Navigator найдите файл DeptEmpPage.jsf и откройте его в Редакторе Дизайна, если он еще не открыт. Из Палитры Компонентов раздела Layout перетащите компонент Separator в левый аккордеон страницы DeptEmpPage.jsf ниже формы Departments. -
Добавим новый поток, созданный вами, как регион к существующим страницам.
Из Application Navigator перетащите search-email-flow.xml файл в левый аккордеон на DeptEmpPage.jsf страница под новый separator. Создать его как Region. -
Ваша страница должна выглядеть так, как на скриншоте ниже.
-
Сохраните вашу работу, а затем запустите обновленный DeptEmpPage.jsf.
Когда страница отображается в браузере тестируйте новую функциональность, вводя значение email в поле Email и нажимая кнопку Find Details. -
Имя сотрудника возвращается.
- Строить бизнес-сервисы, которые обеспечивают данными приложение
- Создавать data-bound JSF страницы.
- Улучшать страницы, добавив более сложные операции,
- Добавлять вторую JSF-страницу, в приложения и создавать диаграммы для определения навигации между страницами
- Создавать многоразовый фрагмент страницы, содержащий бизнес-сервис на основе параметров
- "Разработка Приложений с Использованием Инструментов Веб-Страницы" в Руководстве Пользователя в Oracle JDeveloper
- Веб-Интерфейс Пользователя Руководство Разработчика для Oracle ADF