Создание, обновление и удаление данных с помощью ADF Form в ADF BC
1. Цель руководства
В данной статье я покажу вам как создать приложение ADF Fusion позволяющее отображать данные на ADF Form, с Row Navigation (Навигация по строкам). ADF Form позволяет вам добавлять, и редактировать данные записи, удалять запись.
Это иллюстрация приложения:
2. Создать приложение
Для начала вам нужно создать приложение ADF Fusion со следующими базовыми настройками:
- Создать приложение "ADF Fusion Web Application".
- Подключить к базе данных.
- Создать Application Module.
- Создать Entity Object.
- Создать View Object по умолчанию.
Вы можете посмотреть инструкцию по ссылке:
После шагов выше, вы получите приложение как в изображении ниже:
3. Создать LOV View Object
Когда вы создаете нового сотрудника (Таблица EMPLOYEES) вам нужно выбрать отдель (Таблица DEPARTMENTS) для данного сотрудника через ComboBox, ListBox, LOV (List Of Values),..
Вам нужно создать LOV View Object, они будут использованы во многих функциях приложения.
На JDeveloper выберите:
- File/New/From Gallery...
- >> Bussiness Tier/ADF Bussiness Components/View Object
Введите:
- Package: org.o7planning.adf.model.lovviews
- Name: LOVDepartments
Select Dep.Department_Id
,Dep.Department_Name
,Loc.City
From Departments Dep
,Locations Loc
Where Dep.Location_Id = Loc.Location_Id(+)
Order By Dep.Department_Name
View Object (LOVDept) создан:
LOVJobs
Индентично создайте другой LOV View Object с названием LOVJobs:
Select j.Job_Id
,j.Job_Title
From Jobs j
Order By j.Job_Title
Next .. Next ... Next
4. Создать View Object (V01Employees)
На JDeveloper выберите:
- File/New/From Gallery...
- >> Bussiness Tier/ADF Bussiness Components/View Object
Зарегистрировать V01Employees с Application Module:
После регистрации V01Employees виден на Data Controls.
5. Создать подскаки для интерфейса пользователя (UI Hints)
Когда вы делаете дизайн для вебсайта. Например V01Employees имеет 11 атрибутов (attribute), соответствующие 11 столбцам в таблице базы данных. Инструмент ADF поможет вам создать ADF Form (Форма для ввода данных).
Вам нужно создать (Hint) для ADF Tool (Инструмент ADF).
Открыть V01Employees (View Object):
Создать UI Hints для атрибута DepartmentId.
Выбрать атрибут DepartmentId (DepartmentId attribute) и создать для него новый "List Of Values".
Выбрать LOVDept (LOV View Object), который вы создали в предыдущем шаге.
Здесь я настраиваю отображение столбца DepartmentId вида ComboBox. Если вы хотите отобразить DepartmentId вида LOV (List Of Values) вы можете ссылать на другое руководство по ссылке :
Переключиться на TAB: UI Hints.
Создать UI Hints для атрибута JobId
Тестировать V01Employees используя Oracle ADF Model Tester:
6. Создать View - emp
Открыть adf-config.xml и переместить в него объект View.
Двойное нажатие мыши на emp (View) на adf-config.xml, чтобы создать соответствующую страницу.
Поиск с ключевыми словом "deco" и перетащить объект "Decorative Box (ADF Faces.Layout)" в экран emp.jsf.
7. Создать ADF Form
Перетащить V00Emp1 (View Object) из Data Controls в регион Center в emp.jsf, и выбрать ADF Form, как в изображении ниже:
OK, теперь вы можете запустить приложение. Выберите emp (View) на adf-config.xml и нажмите Run или F11.
8. Submit & Commit
ADF создает для вас кнопку "Submit" чтобы сделать submit веб страницу, но данные еще не были "Commit". Поэтому ничего не меняется для данных в базе данных.
Когда пользователь нажимает на кнопку "Submit", данные обновляются в View Object, и ничего не меняется в базе данных.
Чтобы создать изменения на уровне базы данных, вам необходимо выполнить функцию Commit. У вас есть 2 способа сделать это:
- Способ 1: Вызвать Commit при каждом Submit.
- Способ 2: Создать кнопку Commit.
Способ 1: Вызвать Commit при каждом Submit.
Вызвать функцию Commit, когда пользователь нажимает на кнопку Submit.
На окне emp.jsf переключиться на TAB - Bindings, Нажимите на иконку чтобы добавить "Binding".
На окне emp.jsf переключиться на TAB - Design, выберите кнопку "Submit" и измените значения атрибута ActionListener:
- AcionListener = #{bindings.Commit.execute}
Способ 2: Создать кнопку Commit
Каждый раз когда вы меняете запись, и нажимаете на Submit, изменения будут обновлены в View Object. В конце, нажмите на Submit, чтобы обновить все записи с изменениями в базу данных.
Перетащить объект "Commit" из "Data Controls" в окно emp.jsf чтобы создать "ADF Button":
9. Прикрепить значение к столбцу Sequence при создании записи
Когда вы создаете новую запись для таблицы EMPLOYEES, к столбцу EMPLOYEE_ID будут прикреплены значения из sequence - EMPLOYEES_SEQ. Вам нужно сказать об этом ADF конфигурацией на Entity Object (Employees).
Открыть Entity Object: Employees
Атрибут (attribute) Empno на данный момент имеет вид Integer, измените его на вид Number (как в изображении ниже):
Вам нужно создать соответствующий класс с Employees (Entity Object).
Класс EmployeesImpl создан.
Java вызовет метод EmployeesImpl.create(AttributeList) чтобы создать запись EMPLOYEE. Поэтому в данном методе вам нужно получить значения от Sequence чтобы прикрепить к столбцу EMPLOYEE_ID.
Добавить следующий код к классу EmployeesImpl:
** EmpoyeesImpl **
import oracle.jbo.server.SequenceImpl;
// ....
protected Number getNextSequenceValue(String sequenceName) {
SequenceImpl seq = new SequenceImpl(sequenceName, getDBTransaction());
return seq.getSequenceNumber();
}
/**
* Add attribute defaulting logic in this method.
* @param attributeList list of attribute names/values to initialize the row
*/
protected void create(AttributeList attributeList) {
super.create(attributeList);
// Set value for Empno
this.setEmployeeId(this.getNextSequenceValue("EMPLOYEES_SEQ"));
}
10. Создать новую запись
No ADS
Выше вы создали ADF Form, позволяющую вам редактировать записи. В следующей части вам нужно создать новую запись.
Вам нужно перетащить 2 оператора "Create" или "CreateInsert" из "Data Controls" в окно дизайна (emp.jsf) чтобы создать ADF Button.
Create vs CreateInsert
Что происходит, когда вы используете оператор "Create"?
** Create **
// Create a new row for the View Object
Row newRow = yourViewObject.createRow();
// Mark the row as being "initialized", but not yet new
newRow.setNewRowState(Row.STATUS_INITIALIZED);
Что происходит, когда вы используете оператор "CreateInsert"?
** CreateInsert **
// Create a new row for the View Object
Row newRow = yourViewObject.createRow();
// Mark the row as being "initialized", but not yet new
newRow.setNewRowState(Row.STATUS_INITIALIZED);
// Insert the new row into the View Object's default rowset
yourViewObject.insertRow(newRow);
Перетащить объект "CreateInsert" в окно emp.jsf чтобы создать "ADF Button".
Перезапустите ваш вебсайт:
Когда пользователь нажимает на "CreateInsert", создается строка данных (row) и вставлена в "RowSet" в View Object. Пользователь вводит информацию, и нажимает на Submit, изменения обновлены на View Object. Никакие записи не будут созданы в database (база данных) пока не будет вызван Commit.Вы можете посмотреть подробное объяснение в части "Submit & Commit" выше.
11. Удалить запись
No ADS
Перетащить объект "Delete" из "Data Controls" в окно дизайна emp.jsf чтобы создать "ADF Button":
Когда пользователь нажимает на кнопку "Delete", текущая строка данных (row) будет удалена из "RowSet" в View Object, это значит, что запись на самом деле еще не удалена из database. Она только удалена из database при вызове Commit.Вы можете посмотреть подробное объяснение в части "Submit & Commit" выше.
Перезапустите ваш вебсайт:
No ADS
Руководства Oracle Java ADF
- Установите Oracle JDeveloper 12c в Windows
- Шаги по созданию веб-приложения ADF Fusion с использованием ADF Business Components
- Создайте страницу поиска в ADF BC с помощью Parameter Form и отобразите в ADF Table
- Создание, обновление и удаление данных с помощью ADF Form в ADF BC
- Создание LOV (List Of Values) в Oracle ADF BC
- Понимание Associations, View Links и Master-Detail в Oracle ADF BC
Show More