ADF 11g Rich Client Components – programmatically adding a ShowPopupBehavior

Share this on .. Tweet about this on Twitter0Share on LinkedIn0Share on Facebook0Share on Google+0Email this to someoneShare on TumblrBuffer this page


This morning I received an email from a reader of one of my articles on the blog. The challenge in the email: I want to programmatically create an input field. Then I want to add a showpopup behavior to this input field – to have a popup display when the field is hovered over with the mouse. It turns out that the ShowPopupBehavior is not a UIComponent that you can simply add a child to another UIComponent. So could it be done and if so, how?

A little investigation made clear

that RichInputText, the component class for the Rich InputText component, has a method getClientListeners() (as well as setClientListeners()). When you specify a showPopupBehavior tag in the JSPX file, it is turned into a client side behavior object that is registered in this set of ClientListeners. To programmatically create showpopupbehavior, we have to manipulate this set. Note: all RichInput components seem to have the get/setClientListeners methods; they are not inherited from a common superclass.

The code required in the use case for my emailing reader now turns out to be quite simple.

With this JSF page:

<?xml version='1.0' encoding='windows-1252'?>
<jsp:root xmlns:jsp="" version="2.1"
  < contentType="text/html;charset=windows-1252"/>
      <af:form binding="#{PageManager.form}">
        <af:popup id="myPopup">
          <af:panelWindow title="The Popup"/>

The backing bean has this code:

package nl.amis.view;

import java.util.Set;


public class PageManager {
    private RichForm form;

    public PageManager() {

    public void setForm(RichForm form) {
        RichInputText newText = new RichInputText();
        newText.setLabel("new Text");

<strong>        ClientListenerSet set = newText.getClientListeners();<br />        if (set == null) {<br />            set = new ClientListenerSet();<br />            newText.setClientListeners(set);<br />        }<br />        set.addBehavior(&quot;new AdfShowPopupBehavior('myPopup',AdfRichPopup.ALIGN_AFTER_END,null,'mouseOver')&quot;);<br /></strong>        form.getChildren().add(newText);
        this.form = form;

    public RichForm getForm() {
        return form;


It creates the rich inputText along with the behavior to display a Popup when hovered over:


Share this on .. Tweet about this on Twitter0Share on LinkedIn0Share on Facebook0Share on Google+0Email this to someoneShare on TumblrBuffer this page

About Author

Lucas Jellema, active in IT (and with Oracle) since 1994. Oracle ACE Director for Fusion Middleware. Consultant, trainer and instructor on diverse areas including Oracle Database (SQL & PL/SQL), Service Oriented Architecture, BPM, ADF, JavaScript, Java in various shapes and forms and many other things. Author of the Oracle Press books: Oracle SOA Suite 11g Handbook and Oracle SOA Suite 12c Handbook. Frequent presenter on conferences such as JavaOne and Oracle OpenWorld. Presenter for Oracle University Celebrity specials.


  1. Annotations work, I think you can use four different types. I tried out your idea of change listener and that seems to be more effective but uses more resources so could be a problem if you have a lot of users on a page.

  2. Hi Lucas,

    Good article. I have a similar problem where i have to show pop up dynamically based on the user input on Input Text field.
    Do you think i can use the same solution on the value change listener of Input text.

  3. According to 1.2 specification following annotations should works im managed bean:


    It should works for managed beans with request, session and application scopes.

  4. Hi Lucas,

    Nice solution. I think, instead using setter Form method, more elegant would be:

    public void createPopup(){
    // popup code

    what do you think?