Friday, April 22, 2011

Dynamic Buttons in Oracle ADF

Standard way to create buttons on the page, is to use drag-and-drop method and JDeveloper wizards. However, sometimes its not enough, especially when there are requirements to apply dynamic rules based on security roles or page groups. With dynamic buttons generation, you can use XML configuration files, this will allow to change displayed buttons and properties right on runtime. I'm writing this post, based on influence I got from Frank Nimphius post - ADF Faces RC - Implementation strategies for global buttons in page templates. Frank describes fundamental approach for global buttons, I'm in my post focusing on dynamic global buttons aspect.

You can download developed application - This sample is based on two Entity objects - Countries and Locations, and provides two JSPX pages based on template JSPX. Button components for both pages are generated dynamically. Here is a navigation flow implemented in current sample:

Both of the pages are based on template. This template defines facet for data-bound components and empty toolbox for dynamically generated buttons:

You can notice, that toolbox contains two toolbar components, button objects will be added to those toolbars. Toolbox is binded to managed bean, this allows to initialize toolbox component on the page:

Next step is to bind BeforePhase property of f:view tag contained on the pages to the same managed bean where dynamic buttons are generated:

#{dynamicGenerator.addButtons} method generates dynamic buttons according to current page, information about current page is accessed through phaseEvent, for example:

Buttons are binded to actions defined in actual page definition using ActionListener, disabled property is also set programatically:

If button is not binded to page definition, and is is related to navigation flow, action expression is set:

Main advantage of described approach is that it allows to have the same code for the same actions in different pages - Commit action, for example. And only what you need to care about, is to define actions in page definition files. Actions for countries page:

Actions for locations page:

On runtime, all buttons specific to current page are generated:

First and Previous buttons are disabled, since first entry is shown, Locations button opens locations from current country:

Different set of buttons is generated and by default there are no locations defined for Argentina, we can create a couple:

When Save button is pressed, records are stored to database and sequence values for LocationIdcolumn are assigned:

1 comment:

  1. Very Informative post on dynamic buttons in Oracle ADF,Thank You.
    Oracle ADF Training in Hyderabad.