[Oracle ADF] Implements RegionController


На обычных страницах все решается просто. Добавляется beforephase и afterphase. Во фрагментах вроде как посложнее.

Я ранее не делал, но похоже время пришло.

Нужно, чтобы при открытии фрагмента в сессию записывались нужные мне данные.

Нус, поехали.

Создаю класс, имплементирующий RegionController.

Я пока еще ничего своего не писал.

Получилось вот, что:


package ru.javadev.xxx.utils;

import oracle.adf.model.RegionContext;
import oracle.adf.model.RegionController;

public class FragmentController implements RegionController {

    @Override
    public boolean refreshRegion(RegionContext regionContext) {
        // TODO Implement this method
        return false;
    }

    @Override
    public boolean validateRegion(RegionContext regionContext) {
        // TODO Implement this method
        return false;
    }

    @Override
    public boolean isRegionViewable(RegionContext regionContext) {
        // TODO Implement this method
        return false;
    }

    @Override
    public String getName() {
        // TODO Implement this method
        return null;
    }
}


Захожу в исходники страницы *.jsff с проектом –> bindings.

Из bindings иду в Page Definition File.

Курсор на

<pageDefinition xmlns

В Properties:

ControllerClass: FragmentController

Скриншот из блога индуса:

Скриншот из блога индуса


Так, при старте, выполняется refreshRegion, но выполняется много раз. Нужно, сделать, чтобы он поменьше раз это делл.

@Override
public boolean refreshRegion(RegionContext regionContext) {

    System.out.println("WE ARE HERE 1");

    int refreshFlag = regionContext.getRefreshFlag();
        if(refreshFlag==RegionBinding.RENDER_MODEL){
            System.out.println("WE ARE HERE 2");
        }

    return false;
}

P.S. я на самом деле не уверен, но возможно еть и более простой вариант. В некоторых случаях это может сработать. Превязываем, какой нибудь бин. Делаем, чтобы он создавался при старте и с помощью POSTCONSTRUCT можно выполнить нужную нам логику.

По материалам:

  • http://www.techartifact.com/blogs/2013/09/call-method-on-page-load-of-jsff-jsf-fragment-in-oracle-adf.html#sthash.FxQwqqS6.GIF9kafS.dpbs
  • http://docs.oracle.com/cd/E23943_01/apirefs.1111/e10653/oracle/adf/model/RegionController.html
  • http://vijaysadhu.blogspot.ru/2014/08/implement-regioncontroller-for.html