5 Replies Latest reply on Apr 28, 2009 12:13 PM by juangon

    a4j:poll re-rendering/decoding all the xhtml page?

    juangon

      Hi I have a problem that could be a performance issue in the xhtml (Facelets) that I am currently developing.

      I have a a4j:poll that find new messages for the user. To achieve this, I have a main facelet template that have an sticky footer with the a4j:poll.

      I have a Facelet template like this:

      <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
       "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
      <html xmlns="http://www.w3.org/1999/xhtml"
       xmlns:ui="http://java.sun.com/jsf/facelets"
       xmlns:h="http://java.sun.com/jsf/html"
       xmlns:f="http://java.sun.com/jsf/core"
       xmlns:a4j="http://richfaces.org/a4j"
       xmlns:rich="http://richfaces.org/rich">
      <head>
      
      <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
      <meta http-equiv="pragma" content="no-cache" />
      <meta http-equiv="cache-control" content="no-cache" />
      <meta http-equiv="expires" content="0" />
      <meta http-equiv="cache-control" content="no-store" />
      
      <title><ui:insert name="title">Title</ui:insert></title>
      <head> ....
      </head>
      <body>...
      ...
      <h:form >
       <rich:modalPanel .id="ajaxErrorModalPanel">
       ..
       ..
       </rich:modalPanel>
      </h:form>
      <a4j:region>
       <h:form>
       <a4j:status id="ajaxLoadingStatusModal">
       ....
       </a4j:status>
       </h:form>
      </a4j:region>
      
      <div id="page">
       <div id="header">
       <ui:insert name="header"> </ui:insert>
       </div>
       <div id="body">
       <ui:insert name="body"> </ui:insert>
       </div>
      
      <div id="stickyFooter">
       <h:panelGroup rendered="#{someCondition}">
       <h:form>
       <a4j:region>
       <a4j:poll id="messagesPoll"
       interval="#{someInterval}"
       enabled="true"
       actionListener="#{someActionListener}"
       timeout="60000" status="loadingMessagesStatus"
       reRender="userMessagesPanel" ajaxSingle="true"/>
       </a4j:region>
       </h:form>
       <h:form>
       <a4j:region>
       <rich:toolBar id="stickyToolBar">
       <a4j:status id="loadingMessagesStatus">
       <f:facet name="start">
       <h:graphicImage .../>/indicator.gif"
       title="Loading..."
       height="8px" width="8px" />
       </f:facet>
       </a4j:status>
      
       <rich:toolBarGroup location="left">
       <a4j:outputPanel id="userMessagesPanel">
       ....
       .....
       </a4j:outputPanel>
       </rich:toolBarGroup>
       </rich:toolBar>
       </h:panelGroup>
      </div>
      
      </body>
      
      
      </html>
      


      And I have a page with a rich:datatable that uses the same facelets template (same as written above).

      I saw that in my server logs the rich:datatable was updating every time tha poll was executed.

      I have been searching over the forums here for some weeks, and all the solutions mentioned (putting the poll in another h:form, another a4j:region, ajaxSingle=true", limitToList="true") didn't work.

      Please how could I execute the poll without interfere with the rest of the xhtml page? I am desperated!

      Thanks very much!