[Oracle ADF] Finalize TaskFlow (в конкретном случае имеем Popup)
Смысл. Если пользователь не завершит работу с taskflow, а на странице имеются poll которые периодически вызываются, то ненужные никому вычисления так и будут происходить.
Заходим в taskflow.
Перетаскиваем на него значек “Task Flow Return”
От jsf страниц к нему стрелки (“Control Flow Case”).
И названия для них, например “passivate”.
Далее на странице делаю скрытую кнопку.
1
2
<af:button text="PASSIVATE_TASKFLOW" id="b_passivate" action="passivate" visible="false"
binding="#{pageFlowScope.MyBean.passivationBtn1}"/>
По ее нажатии будет выполняться действие описанное в taskflow как action=”passivate”.
Остается нажать эту кнопку, при нужном событии:
ADF-UTILS:
https://bitbucket.org/oracle-adf/adf-utils/src/0ac62ba404606a29305ed4af7461d6aa9ce59095/src/main/java/org/javadev/adf/utils/UIUtils.java?at=master&fileviewer=file-view-default
Например:
1
2
3
4
5
6
---
UIUtils.runButtonByJS(this.passivationBtn1);
ADFPopupUtils.closePopup(actionEvent.getComponent());
---
Если при следующем обращении к taskflow будет белый экран.
1
2
3
4
5
6
7
8
<af:popup childCreation="deferred" autoCancel="disabled" id="p3"
popupFetchListener="#{MyPageBean.onPopupOpen}">
<af:panelWindow id="pw2" closeIconVisible="false" modal="true" styleClass="fuse-popup"
contentHeight="748" contentWidth="1256" stretchChildren="first">
<af:region value="#{bindings.myTaskFlow.regionModel}" id="r2"
binding="#{MyPageBean.myRegion}"/>
</af:panelWindow>
</af:popup>
1
2
3
4
5
6
7
private RichRegion myRegion;
---
Геттер и Сеттер для myRegion
---
1
2
3
4
5
6
7
public void onPopupOpen(PopupFetchEvent popupFetchEvent) {
if (null != myRegion){
myRegion.refresh(FacesContext.getCurrentInstance());
}
}