webtier@glassfish.java.net

Re: Custom component with AjaxBehavior

From: <webtier_at_javadesktop.org>
Date: Mon, 14 Sep 2009 08:27:05 PDT

Basically, I wanted to see how I can write my own ajaxified component using the new AjaxBehavior mechanism.

The following is based on guesses and try-and-error, but at least the AJAX request is sent to the server. However, the event is not passed to the method specified in the "listener" attribute of the f:ajax tag.

So far, I have:
----- begin component
@FacesComponent (value="CustomAjaxComponent")
public class CustomAjaxComponent extends UIComponentBase implements ClientBehaviorHolder {

        @Override
        public String getFamily() {
                return null;
        }

        @Override
        public void encodeEnd(FacesContext context) throws IOException {

                ClientBehaviorContext behaviorContext = ClientBehaviorContext.createClientBehaviorContext(context, this, "click", getId(), null);

                ResponseWriter responseWriter = context.getResponseWriter();
                responseWriter.startElement("div", null);
                responseWriter.writeAttribute("id", getId(), null);
                responseWriter.writeAttribute("onclick", getClientBehaviors().get("click").get(0).getScript(behaviorContext), null);
                responseWriter.write("click me!");
                responseWriter.endElement("div");
        }

        @Override
        public Collection<String> getEventNames() {
                return Arrays.asList("click");
        }

}
----- end component

and an XHTML page where I use it:
----- begin XHTML page
...
<x:customAjaxComponent>
    <f:ajax event="click" execute="@form" render="@form" listener="#{ajaxPage.processClick}" />
</x:customAjaxComponent>
...
----- end XHTML page
[Message sent by forum member 'denbo' (blastculture_at_web.de)]

http://forums.java.net/jive/thread.jspa?messageID=363904