[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: