Skip to main content

Refresh the parent view when a taskflow displayed in a popup returns

This post discusses an interesting use case on refreshing the parent view when an in-line popup taskflow returns. There are two taskflows, both work with separate transaction contexts(Transaction attribute is set as new-transaction). Second taskflow is invoked from the first one as a dialog. The requirement here is to refresh the 'executables' of calling page(from first taskflow) when the second taskflow returns. This scenario usually arises when the second task flow updates tables used by the first one from a different transaction context.

To learn more on taskflow, please refer Part III Creating ADF Task Flows in Fusion Middleware Fusion Developer's Guide for Oracle ADF.

Cool, now back to the use case. One possible solution for the above scenario is to define a returnListener for secondary window on the command button (which invokes second taskflow as dialog) and add the custom logic to refresh the underlying IteratorBindings used by the parent page. Last step is to manually refresh the parent view by adding it as PartialTarget - RequestContext.getCurrentInstance().addPartialTarget(returnEvent.getComponent().getParent().getParent());
That's it, job is done. I'm copying the relevant code snippet below for your reference.
<af:commandMenuItem text="Create" id="cmi1" action="create"
windowHeight="250" windowWidth="500"/>
public void dialogReturnListener(ReturnEvent returnEvent) {
  BindingContext bc = BindingContext.getCurrent();
  DCBindingContainer dcb =
  DCIteratorBinding iter =


You can download the sample workspace from here.
[Runs with Oracle JDeveloper 11g R1 PS2 + HR Schema]

How to run this sample?

Run the main.jspx. This page contains 'outer-task-flow-definition' which displays Departments details on a table. Select the 'create' menu item from the toolbar, which opens up 'inner-task-flow-definition' in a popup. Key in the new department details and click on Save. This action closes the popup and then refreshes the parent view to display new record.

Learn More ...

There are a lot more points like this. If  you are curious to learn the internals of the ADF Business Components and ADF Binding Layer,  the following book is for you - Oracle ADF Real World Developer’s Guide.
More details about this book can be found in this post-


Anonymous said…
Thanks for posting this, however there is one problem with this, you see a blank page for 1-2 seconds and then it loads the view

May be its a ADF bug?

Anonymous said…
to be specific, second taskflow running as a Dialog with inline-popup it launches and shows blank view till pageDef executed with all data to display.

Jobinesh said…
This seems to be the delay in loading the task flow( server round trip + execution + loading). btw, thanks for pointing out, will try to see whether this can be optimized/fine tuned further.
Anonymous said…
Is there a way to avoid user interaction during the 1-2 sec delay during the page refresh?

Jobinesh said…
You can take a look at this post
Please see whether this helps you here
sunil ravinder said…
This comment has been removed by the author.
sunil ravinder said…
This comment has been removed by the author.
sunil ravinder said…
Hi jobinesh,

I have a scenario where the second taskflow is not shown in a popup, but is part of the parent page itself.

If my parent page has a table, how do I refresh the table (as i don't want whole page refresh) when I am doing a save in the second taskflow..

Any ideas ?

Jobinesh said…
One possibility is to use Contextual Events. Details can be found here-
Daniel said…

I am using a inline popup to solve my specific scenario. By default, it already comes with an "x" button that closes the popup. If I add the code you published in some kind of "Close" our "Save" button like you did, if the user decides to close de window by the native X button, it won't refresh the parent page. What would you suggest me do?
Jobinesh said…
One possibility is to embed the taskflow in your own popup and add a popupCanceledListener. Another option may be( not a gr8 solution) hide the close icon using skinning
Daniel said…

Thanks for the quick answer! I'm sorry, but i'm still a newbie to ADF. What do you mean when you say "embed the taskflow in my own popup"?
Currently, I have a bounded taskflow for my inline popup (with a close function that calls a taskFlowReturn), and my home page calls this taskflow from a menu option.
I'm gonna do some research on the listener you suggested, thanks!
Jobinesh said…
Please see this link -
Anooj said…
Hi Jobinesh,

In my scenario, I am calling the second taskflow as inline popup.

The main issue that I face is to return multiple values from second taskflow to the first taskflow.

Is there a way I can pass and receive multiple values from taskflow.
Jobinesh said…
You can return mulitple values out of the box. Another option is wrap them in a an ArrayList and return
Anooj said…
This comment has been removed by the author.
Anooj said…
Hi Jobinesh,

I am able to return multiple parameters using ArrayList.

Can you still update me on how to return multiple values out of the box.
garg said…
If I open 2nd taskflow as a default i.e Run as Dialog=false and Display Type external window then returnListener function never called. Any idea?

Thanks in Advance.
Helo sir,
this is Ashish

I am working on ERP project using ADF.
I have problem related to ReturnListener that, when User search more than 10 times on the Search form then returnListener method on parant form.

I am not able to trace the error where it occur so please help to overcome from this situation.

thank you.
Hi Jobinesh,

I am trying to open a new browser window as modeless window using commandImageLink/commandButton. I have set following parameters to the above UI components


Even though windowModalityType is stated as "modeless", new window opens as modal window.

I am using JDeveloper I checked in forums and found others also are facing the same issue.

Can you point out, what is the correct way to display a modeless window?
Anonymous said…
Hi Dinesh,

I am having the same issue with windowModalityType="modeless". Please share your thoughts if you already have the solution.

Below is the solution to launch modeless window

1. Create a jspx page with the contents to be displayed in popup window
2. In the action listener of the link/button, invoke bean method, which has below code

public void launchPopupwindow(ActionEvent event)
//launch new window for revisions
FacesContext context = FacesContext.getCurrentInstance();
// Create the dialog UIViewRoot
ViewHandler viewHandler = context.getApplication().getViewHandler();
UIViewRoot dialog = null;
HashMap properties = new HashMap();
AdfFacesContext afContext = AdfFacesContext.getCurrentInstance();

properties.put("width", new Integer(850));
properties.put("height", new Integer(450));

dialog = viewHandler.createView(context, );

afContext.launchDialog(dialog, null,
// no particular parameters
null, // not launched from any component
true, //show in dialog


This will launch a seperate window for the defined dimensions
Anonymous said…

Thanks for your quick reply. I have a requirement to open a new browser window that being populated with values from the Managed bean.

Does your solution works for non-static pages.

Yes. The solution works both for static and dynamic pages. Ensure the scope of the bean is properly defined.

with best regards,
Anonymous said…

Thanks for your time. It worked

Anonymous said…

I have tried your solution and it worked. What if I want to open the same browser window instead of new browser window every time.

I have tried with following code also. But it is still open new window instead of open page in the exist window.

ExtendedRenderKitService erks =
StringBuilder script = new StringBuilder();
script.append("\"" +
"/MyApp-ViewController-context-root/faces/newSearch.jspx + "\");");
erks.addScript(FacesContext.getCurrentInstance(), script.toString());

I appreciate your response.


Do you mean opening in a seperate tab in the same window or in the same tab?

If it is in same tab, then you have to navigate to different page using taskflows. If it is in seperate tab, try using af:showPopupBehavior. It will open the current window in a seperate tab. You have to explore ways to get your page using above two approaches.
Correction in above post.

Use af:showPrintablePageBehavior to open the same page in seperate tab.

badri said…

My scenario is ,

I have two pages with two links.

If i click on link in Page1 has to open new window, now if i click on link in page 2 it has to use the same opened window not the new one.

I tried with
script.append("'").append(taskflowURL).append("', 'WorkflowDetailWindow', 'status=0,resizable=1,toolbar=0,location=0,menubar=0,width=600,height=800', true);");

Note: If i pass the Urls ( it is working fine. But if i pass the Taskflowurl then every time it is opening in new window.

I am getting the taskflow url like below :
String taskflowId="CountryDataTF";
String taskflowDocument="/WEB-INF/CountryDataTF.xml";
String taskflowURL = ControllerContext.getInstance().getTaskFlowURL(false,new TaskFlowId(taskflowDocument,taskflowId),params);

Any suggestions please

Popular posts from this blog

How to set Bind Variable Values at runtime ?

In this post I'm sharing a couple of approaches for programmatically setting bind variables values at run time. This post is an attempt to explain 'When to use what ?'[ In case if you are familiar with 'Bind Variables' in ADF BC, please refer Section 5.10, Working with Bind Variables in Fusion Developer's Guide ]

1. Set the Bind Variable value using RowSet::setNamedWhereClauseParam(...)

You can use use the setNamedWhereClauseParam(...) method on the ViewObject interface (which extends oracle.jbo.RowSet) to set the value for bind variables. Please note this sets the value on default RowSet. In other words, this doesn't have any effect on the secondary RowSets that you/system generates.
ViewObject vo = am.findViewObject("EmployeesView1"); vo.setNamedWhereClauseParam("bindVarDeptId", new Number(10)); vo.executeQuery();
2. Set the Bind Variable value using ViewObject's VariableValueManager::setVariableValue(...)

VariableValueManager Ma…

Happy New Year 2018 !

We can't go back and change the beginning, but we always can start where we are and change the ending. Believe in yourself and you will be unstoppable!

Wishing you and your family a very happy new year 2018 !!!