Apply ActionListener to programmatically created buttons/link in ADF

Sharing is Caring

This post is next in series of “Working with ADF Faces Components programmatically”. In this post I’ll show you how to apply ActionListener to a programmatically created button or link
Previous posts are-
Creating a dynamic layout (form and UI Component) using ADF Faces
Get Value from programmatically created components, Iterate over parent component to get child values in ADF Faces

Let’s start (Jdev 12.13) –

    • First created a fusion web application and a page in the viewController project
    • Dropped a button on the page, on this button action I will create a link programmatically and assign actionListener to it
    • To create a new link I have added following code (described in previous posts)

    /**Method to add dynamically created component to a parent layout
     * @param parentUIComponent
     * @param childUIComponent
    public void addComponent(UIComponent parentUIComponent, UIComponent childUIComponent) {


       //Creating Link programmatically on button click     
        RichLink ui = new RichLink();
        ui.setText("Programmatically Created Link");
        //Add this link to parent form layout
 //ParentGroupLayoutBind is the component binding of panelGroupLayout
        addComponent(getParentGroupLayoutBind(), ui);


    • After this we are able to create a new Link on click of the button, now next is to assign ActionListener to this Link.
      For this requirement first, I have to define an ActionListener method in the bean. So I have added this


    /**Action Listener to be applied on dynamically created button
     * @param actionEvent
    public void actionForProgLink(ActionEvent actionEvent) {
        FacesMessage infoMsg = new FacesMessage("Action Listener Invoked");
        FacesContext.getCurrentInstance().addMessage(null, infoMsg);


    • Now how to assign this ActionListener to that dynamically created Link?
      See the Code-


    /**Method to to resolve actionListener
     * @param actionName
    private ActionListener getActionListener(String actionName) {
        //here Testbean is the name of ManagedBean
        MethodExpression methodExp = getMethodExpressionForAction("#{viewScope.Testbean." + actionName + "}");
        return new MethodExpressionActionListener(methodExp);

Helper method to resolve ActionListener-

private MethodExpression getMethodExpressionForAction(String actionName) {
 Class[] argtypes = new Class[1]; argtypes[0] = ActionEvent.class;

FacesContext facesCtx = FacesContext.getCurrentInstance();
Application app = facesCtx.getApplication();
ExpressionFactory elFactory = app.getExpressionFactory();
ELContext elContext = facesCtx.getELContext();
return elFactory.createMethodExpression(elContext, actionName, null, argtypes);

Just pass the name of the method to resolve it

   //Apply ActionListener on this dynamically created link

Now time to check, run application 🙂
First, a button appears-

On click of this button, a link is created –

Click on this link- programmatically assigned Action Listener is called

Apply ActionListener

Cheers, Happy Learning 🙂

Related Posts

8 thoughts on “Apply ActionListener to programmatically created buttons/link in ADF”

  1. Hi Ashish. Great series!!!

    I am currently having to do something exactly along these lines – programmatically creating a number of buttons and to each of these buttons add event behavior (mouseOver, actionListener, contextMenu). However, in addition to having an actionListener to perform one action, I want to provide a right-click context menu of additional options where each menu-item is tied to its own actionListener. The difficulty that I am having is once the menu is rendered and the actionListener for the menu-item invoked, I cannot get the id of the component from which the right-click used to present the context-menu, was generated.

    Have you done anything along these lines or do you have any suggestions about how it might be accomplished.

    Thanks – Steve.

  2. public void actionForProgLink(ActionEvent actionEvent) {

    in these method i want to get the id of links that created in button
    how i can do that???????????

Leave a Reply

Your email address will not be published. Required fields are marked *