4 Replies Latest reply on Jan 18, 2008 4:42 AM by Florian Marwede

    Please help with the a4j:push component

    Julien Martin Expert

      Hello,
      I tried to reproduce the example given for the a4j:push without success. Here is my code:

      The managed bean (request-scoped):

      package pack;
      
      import java.util.Date;
      import java.util.EventListener;
      import java.util.EventObject;
      import org.ajax4jsf.event.PushEventListener;
      
      
      /**
       *
       * @author Administrator
       */
      public class TheBean {
      
       private Date date;
       private PushEventListener listener= new MyPushEventListener();
      
       public TheBean() {
       }
      
       public void addListener(EventListener listener) {
       synchronized (listener) {
       if (this.listener != listener) {
       this.listener = (PushEventListener) listener;
       }
       }
       }
      
       public Date getDate() {
       return new Date();
       }
      
       public void push() {
       synchronized (this.listener) {
       this.listener.onEvent(new EventObject(this));
       }
       }
      }
      
      
      


      The push event listener:

      package pack;
      
      import java.util.EventObject;
      import org.ajax4jsf.event.PushEventListener;
      
      public class MyPushEventListener implements PushEventListener {
      
       public void onEvent(EventObject evt) {
       System.out.println(evt.getSource());
       TheBean b = (TheBean) evt.getSource();
       b.getDate();
       System.out.println(b.getDate());
       }
      }
      
      


      The jsp that pushes:

       <f:view>
       <a4j:status startText="in progress" stopText="done"/>
      
       <h:form>
       <a4j:region>
       <a4j:commandButton value="Push!!" action="#{theBean.push}" ajaxSingle="true"/>
       <a4j:log level="ALL" popup="false" hotkey="L"/>
       </a4j:region>
       </h:form>
       </f:view>
      


      The receiver with the a4j:push:

       <f:view>
       <a4j:status startText="in progress" stopText="done"/>
      
       <a4j:form>
       <rich:message for="date" passedLabel="ok" ajaxRendered="true" showDetail="true"/>
       <a4j:region>
       <a4j:push reRender="date" eventProducer="#{theBean.addListener}" interval="100"/>
       </a4j:region>
       <a4j:outputPanel id="date" ajaxRendered="true">
       <h:outputText value="#{theBean.date}">
       <f:convertDateTime type="time"/>
       </h:outputText>
       </a4j:outputPanel>
       <a4j:log level="ALL" popup="false" hotkey="L"/>
       </a4j:form>
       </f:view>
      


      Here is the behavior that I have: When I press the pusher button the onEvent method does get called but the date is not reRendered. Can anyone please tell me why?

      What I am getting wrong?

      Thanks in advance,

      Julien.