[Oracle ADF] Создание REGION (Вынести часть логики со страницы в отдельный REGION)
Шаг 1
Создаю Фрагмент New --> Create ADF Page Fragment
File Name: my_test.jsff
Document Type: JSP XML
Page Layout: Create Blank Page
Должен быть с такими блоками (по крайней мере для того, чтобы вставлять af:panelStretchLayout):
1
2
3
4
5
6
<?xml version='1.0' encoding='UTF-8'?>
<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" version="2.1" xmlns:af="http://xmlns.oracle.com/adf/faces/rich"
xmlns:f="http://java.sun.com/jsf/core">
</jsp:root>
У меня такие в последний раз получились для panelStretchLayout, dvt и еще чего-то:
1
2
3
4
5
6
7
<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" version="2.1"
xmlns:af="http://xmlns.oracle.com/adf/faces/rich"
xmlns:dvt="http://xmlns.oracle.com/dss/adf/faces"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:c="http://java.sun.com/jsp/jstl/core">
</jsp:root>
Шаг 2
new --> From Gallery --> ADF Task Flow (JSF/Facelets)
File Name: my-test-task-flow.xml
+ Create as Bounded Task Flow
+ Create with Page Fragments
Шаг 3
Перетаскиваю фрагмент на task flow
Шаг 4
Перетаскиваем Task Flow на страницу --> as Region
Шаг 5
При необходимости в файле jazn-data.xml добавляю taskflow в список разрешенных с точки зрения security.
Resource Grants:
--> Tresource Type: task Flow
--> Source Project: MyProject
Нахожу taskflow правой кнопкой мыши --> Add to Existing Entitlement
Пример работы с регионом (вроде какой-то хреновый пример)
public void myMethod(ActionEvent actionEvent) {
RichRegion region = (RichRegion)actionEvent.getComponent().findComponent("REGION_NAME);
if(region != null){
System.out.println("REFRESH REGION " + region.getId());
region.refresh(FacesContext.getCurrentInstance());
}
}
Скорее всего устаревшая информация
После того, как вынесли часть логики проекта в регионы, повторяющуюся на нескольких формах, не отображались данные из ViewObject. Сами данные мы успешно получали в консоли.
Оказалось, что для того, чтобы данные отбражались, необходимо было установить свойство isolated в taskflow.
Область видимости в выносимом фрагменте для компонентов мы использовали: viewScope. Получалось что-то вида actionListener=”#{viewScope.myBean.onSomethingHappeded}”>
BackingBeanScope не подошла. При ее использовании для работы с компонентами во фрагменте, валились nullpointerexception при обращении к ним.
Может кому будет полезно. А так запись, чтобы не забыть.
Practice
Динамические регионы
Пока использую, но до конца не разобрался, как работает.
Пример:
http://www.baigzeeshan.com/2010/06/working-with-dynamic-regions-in-oracle.html http://www.learnoracleadf.com/2012/06/adf-dynamic-region-working-with-oracle.html
Page Fragment Lifecycle listener:
- https://docs.oracle.com/cd/E17904_01/web.1111/b31974/taskflows_complex.htm#ADFFD22035
- Workaround от Frank’a