Часто возникает необходимость в создании на странице двух списков. Причем что
бы второй формировался в зависимости от
значения первого. Такие списки называются
каскадными.
Для создания списков будем использовать стандартную тестовую
базу Scott.
В этой базе находится таблицы Dept(отделы)и Emp(сотрудники).
Dept
Название поля
|
Тип
|
Описание
|
Deptno
|
Number
|
Номер отдела
|
Dname
|
String
|
Имя отдела
|
Loc
|
String
|
месторасположение
|
Emp
Название поля
|
Тип
|
Описание
|
Empno
|
Number
|
Номер сотрудника
|
Ename
|
String
|
Имя сотрудника
|
Job
|
String
|
Должность
|
Mgr
|
Number
|
Номер руководителя
|
Hiredate
|
Date
|
Дата принятия
|
Sal
|
Number
|
Зарплата
|
Comm
|
String
|
Примечание
|
Deptno
|
Number
|
Номер отдела
|
Каждый отдел имеет свой номер и имя. А каждый сотрудник
имеет номер, имя и номер отдела к которому он принадлежит. Создадим каскадные
списки, что бы при выборе отдела в одном списке, во втором выводились его
сотрудники. Приступим.
-
Создайте приложение "CascadeLovApp".
-
Создайте View объекты EmpView и DeptView на основе таблиц с БД Dept и Emp.
Создайте View объект. В первом окне в поле name напишите CascadeLOV и снизу выберите "Rows populated programmatically,
not based on a query" и нажмите "Next".Откройте CascadeLOV и во вкладке Attributes нажмите один раз по Dept.Добавьте LOV как показано на сл. картинках
Далее сделайте тоже самое для Emp, только используя List Data Source:EmpView1, List Attribte:EmpNo, UI Hints:Ename.
Списки созданы. Теперь нам их надо как то связать. Для этого зайдите во VO объект EmpView во вкладку Query и создайте Bind Variable : dempno и View Criteria: EmpViewCriteria как показано на сл. картинках.
После этих операций мы создали критерий по отбору сотрудников по номеру отдела ( (Emp.DEPTNO = :dempno ) ) через созданный нами параметр dempno. Теперь нам надо в этот параметр вставить выбираемое значение из списка отделов. Для этого вернитесь в CascadeLOV и выберите вкладку View Acessors и нажмите на редактирование EmpView1
В открывшемся окне добавьте созданный нами критерий как показано на картинке и впишите в Value название нашего поля в CascadeLOV с выбранным отделом, то есть Dept.
Добавим наш VO CascadeLOV в наш AppModule
Все.Наши каскадные списки созданы и их работу можно проверить в Application Module. Создадим теперь эти списки на форме и добавим операцию Create insert, так как CascadeLOV сейчас пустая и что работать с ней нужно добавить запись
Если сейчас запустить cascaelov.jspx, то можно убедиться что списки не выпадают каскадом.
И что бы они работали, нам необходимо настроить обновление компонентов на странице. Эта настройка происходит с помощью свойств компонент AutSubmit(Обновление компонент(True,False)) и PartialTriggers(в нем указываем компонент от которого зависит обновление и в котором AutoSubmit=True)
Установите в SelectOneChoice - Dept свойство autoSubmit="true", а Установите в SelectOneChoice - Emp свойство partialTriggers="soc1"(id списка Dept).
Каскадный список готов : )
Комментариев нет:
Отправить комментарий