В этом практикуме показано применение динамического региона и динамическое связывание данных.
Динамический регион.
Создадим запрос для получения всех менеджеров.
Текст запроса:
Затем в качестве "Key Attribute" надо указать "EmployeeId"
Разместим запрос в AppModule. Далее создадим аналогичный запрос который вернет только служащих "Employer".
Создадим страницу с фрагментами "manager.jsff", в нее перетащим DataControl - "Manager1". И на его основе создадим Table см. рисунок.
Оставим поля и настроим его, как на рисунке ниже
Далее создадим taskFlow c фрагментами для этой страницы.
Поместим в него страницу "manager.jsff"
Далее сделаем еще одну страницу-фрагмент "employer.jsff", данные возьмем из "Employer1", страницу поместим в новый taskFlow - "task-flow-employer". Таким образом есть две страницы каждая в своем taskFlow.
Перетащим например taskFlow - "task-flow-manager" на форму main.jsff
Далее выберем bean - "mainBean", для свойства "DynamicTaskFlowId".
Для свойства "taskFlowId" создадим Accessors
На форме main.jsff переделаем внешний вид дерева. Удалим OutputText, добавим commandImageLink и для него оператор setActionListener, который настроим на свойство бина taskFlowId.
Таким образом по нажатию на link свойству бина "taskFlowId" будет присваиваться ИД задачи (taskFlowId), который считался из базы. В свою очередь при rendering страницы из свойства "DynamicTaskFlowId" будет считываться ИД ранее туда помещенный благодаря оператору (setActionListener). В таблицу Menu БД необходимо внести изменения, записать taskFlowID
Скрипт для SqlPlus :
В настройках security приложения дать права на новые задачи.
Некоторые изменение надо внести в прошлый проект, изменить scope mainBean на - session
Иначе всегда будет показываться задача с "Менеджерами". Еще внести изменения в файле mainPageDef.xml, должно быть - <taskFlow id="dynamicRegion1" taskFlowId="${mainBean.dynamicTaskFlowId}"
Запускаем http://127.0.0.1:7101/myadf/faces/index, авторизуемся, и переключаемся между задачами из меню.
Динамическое переключение связей.
Сделаем форму просмотра (только чтение) "Менеджеров" и "Специалистов". По атрибутному составу они одинаковы, но взяты из разных источников данных (VO - Employer и Manager). Весь дизайн сделаем для "Employer", а затем в нужном месте вставим выражение (EL) которое будет вычислять нужный источник данных.
Разместим DataControl
Поместим эту форму в новый taskFlow
Сделаем возврат из задачи
В TaskFlow "task-flow-manager" сделать вызов задачи "task-flow-edit-emp", перетащив последнюю из структуры проекта.
На форме "edit-emp", для кнопки, свойству Action сделать выбор - "goBack"
На форме "manager.jsff" для таблицы добавить колонку, и в нее поместить кнопку с переходом на "goView"
Для taskFlow "task-flow-employer" и формы "employer.jsff" проделать подобные изменения.
После этого форму "edit-emp" можно настроить на вычисляемый источник данных. В бине "mainBean" добавим свойство "empDataSource"
Код в бине
На страничке "edit-emp" на вкладке Bindings для "Employer1Iterator", для свойства "Binds" написать выражение "#{mainBean.empDataSource}"
Все готово. Теперь при выборе из меню будет работать динамический регион, а по нажатию кнопки View на форме (Менеджеры/Сотрудники) открываться форма просмотра (физически одна и та же) с динамическим переключением источника данных.
Источник:
Dynamic Iterator Binding to Reuse View Link Relationship for Master-Detail
http://andrejusb.blogspot.ru/2010/04/dynamic-iterator-binding-to-reuse-view.html
Исходный код
Динамический регион.
Создадим запрос для получения всех менеджеров.
Текст запроса:
select employee_id, first_name, last_name, email, phone_number, hire_date, job_id, salary, commission_pct, manager_id, department_id from employees t where t.employee_id in ( select e.manager_id from employees e )
Затем в качестве "Key Attribute" надо указать "EmployeeId"
Разместим запрос в AppModule. Далее создадим аналогичный запрос который вернет только служащих "Employer".
Создадим страницу с фрагментами "manager.jsff", в нее перетащим DataControl - "Manager1". И на его основе создадим Table см. рисунок.
Оставим поля и настроим его, как на рисунке ниже
Далее создадим taskFlow c фрагментами для этой страницы.
Поместим в него страницу "manager.jsff"
Далее сделаем еще одну страницу-фрагмент "employer.jsff", данные возьмем из "Employer1", страницу поместим в новый taskFlow - "task-flow-employer". Таким образом есть две страницы каждая в своем taskFlow.
Перетащим например taskFlow - "task-flow-manager" на форму main.jsff
Далее выберем bean - "mainBean", для свойства "DynamicTaskFlowId".
Для свойства "taskFlowId" создадим Accessors
На форме main.jsff переделаем внешний вид дерева. Удалим OutputText, добавим commandImageLink и для него оператор setActionListener, который настроим на свойство бина taskFlowId.
Таким образом по нажатию на link свойству бина "taskFlowId" будет присваиваться ИД задачи (taskFlowId), который считался из базы. В свою очередь при rendering страницы из свойства "DynamicTaskFlowId" будет считываться ИД ранее туда помещенный благодаря оператору (setActionListener). В таблицу Menu БД необходимо внести изменения, записать taskFlowID
Скрипт для SqlPlus :
update menu t set taskflow = '/WEB-INF/task-flow-manager.xml#task-flow-manager' where name= 'Менеджеры'; update menu t set taskflow = '/WEB-INF/task-flow-employer.xml#task-flow-employer' where name= 'Специалисты'; commit;
В настройках security приложения дать права на новые задачи.
Некоторые изменение надо внести в прошлый проект, изменить scope mainBean на - session
Иначе всегда будет показываться задача с "Менеджерами". Еще внести изменения в файле mainPageDef.xml, должно быть - <taskFlow id="dynamicRegion1" taskFlowId="${mainBean.dynamicTaskFlowId}"
Запускаем http://127.0.0.1:7101/myadf/faces/index, авторизуемся, и переключаемся между задачами из меню.
Динамическое переключение связей.
Сделаем форму просмотра (только чтение) "Менеджеров" и "Специалистов". По атрибутному составу они одинаковы, но взяты из разных источников данных (VO - Employer и Manager). Весь дизайн сделаем для "Employer", а затем в нужном месте вставим выражение (EL) которое будет вычислять нужный источник данных.
Разместим DataControl
Поместим эту форму в новый taskFlow
Сделаем возврат из задачи
В TaskFlow "task-flow-manager" сделать вызов задачи "task-flow-edit-emp", перетащив последнюю из структуры проекта.
На форме "edit-emp", для кнопки, свойству Action сделать выбор - "goBack"
На форме "manager.jsff" для таблицы добавить колонку, и в нее поместить кнопку с переходом на "goView"
Для taskFlow "task-flow-employer" и формы "employer.jsff" проделать подобные изменения.
После этого форму "edit-emp" можно настроить на вычисляемый источник данных. В бине "mainBean" добавим свойство "empDataSource"
Код в бине
На страничке "edit-emp" на вкладке Bindings для "Employer1Iterator", для свойства "Binds" написать выражение "#{mainBean.empDataSource}"
Все готово. Теперь при выборе из меню будет работать динамический регион, а по нажатию кнопки View на форме (Менеджеры/Сотрудники) открываться форма просмотра (физически одна и та же) с динамическим переключением источника данных.
Источник:
Dynamic Iterator Binding to Reuse View Link Relationship for Master-Detail
http://andrejusb.blogspot.ru/2010/04/dynamic-iterator-binding-to-reuse-view.html
Исходный код
Комментариев нет:
Отправить комментарий