ADF 11g Rich Client Components – programmatically adding a ShowPopupBehavior



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:



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 & PLSQL), Service Oriented Architecture, BPM, ADF, Java in various shapes and forms and many other things. Author of the Oracle Press book: Oracle SOA Suite 11g Handbook. Frequent presenter on conferences such as JavaOne, Oracle OpenWorld, ODTUG Kaleidoscope, Devoxx and OBUG. 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?