1 Reply Latest reply on Feb 4, 2010 2:58 PM by Shervin Asgari

    Need Help to improve preformance when displaying a Large List

    trind Newbie

      Atm when i display list with many items around 1500 or so it takes 10-15 sec until the page is rendered on the Webbrowser.



      I user Seam 2.2 and Jboss Server 5.1, any tips what i should do diffrent?






      import lu.ldc.lea.entity.DomainName;
      
      
      import org.jboss.seam.annotations.Name;
      import org.jboss.seam.framework.EntityQuery;
      import java.util.List;
      import java.util.Arrays;
      
      @Name("domainNameList")
      public class DomainNameList extends EntityQuery<DomainName> {
      
           private static final String EJBQL = "select domainName from DomainName domainName";
      
           private static final String[] RESTRICTIONS = {
                "lower(domainName.domainName) like concat(lower(#{domainNameList.domainName.domainName}),'%')",
                "lower(domainName.dnsMx) like concat(lower(#{domainNameList.domainName.dnsMx}),'%')",
                "lower(domainName.dnsZoneFileUpdate) like concat(lower(#{domainNameList.domainName.dnsZoneFileUpdate}),'%')",
                "lower(domainName.dnsA) like concat(lower(#{domainNameList.domainName.dnsA}),'%')",
                "lower(domainName.dnsAaaa) like concat(lower(#{domainNameList.domainName.dnsAaaa}),'%')",
                "lower(domainName.dnsSoaRname) like concat(lower(#{domainNameList.domainName.dnsSoaRname}),'%')",
                "lower(domainName.comment) like concat(lower(#{domainNameList.domainName.comment}),'%')", };
      
      
           private DomainName domainName = new DomainName();
      
           public DomainNameList() {
                setEjbql(EJBQL);
                setRestrictionExpressionStrings(Arrays.asList(RESTRICTIONS));
                setMaxResults(2500);
           }
      
           public DomainName getDomainName() {
                return domainName;
           }
      
      }
      



      And my xhtml page is like this.


      <!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
                                   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      
      
      <ui:composition xmlns="http://www.w3.org/1999/xhtml"
                      xmlns:s="http://jboss.com/products/seam/taglib"
                      xmlns:ui="http://java.sun.com/jsf/facelets"
                      xmlns:f="http://java.sun.com/jsf/core"
                      xmlns:h="http://java.sun.com/jsf/html"
                      xmlns:rich="http://richfaces.org/rich"
                      template="../../layout/template.xhtml">
                             
      <ui:define name="body">
          
          
          
          <h:form id="domainNameSearch" styleClass="edit">
          
              <rich:simpleTogglePanel label="DomainName search parameters" switchType="ajax">
              
                  <s:decorate template="../../layout/display.xhtml">
                      <ui:define name="label">#{localization.getTranslation('lea.domainname')}</ui:define>
                      <h:inputText id="domainName" value="#{domainNameList.domainName.domainName}"/>
                  </s:decorate>
      
                
                  <s:decorate template="../../layout/display.xhtml">
                      <ui:define name="label">#{localization.getTranslation('lea.comment')}</ui:define>
                      <h:inputText id="comment" value="#{domainNameList.domainName.comment}"/>
                  </s:decorate>
      
              
              </rich:simpleTogglePanel>
              
              <div class="actionButtons">
                  <h:commandButton id="search" value="#{localization.getTranslation('lea.search')}" action="/Lea/admin/DomainNameList.xhtml"/>
      
              <s:button 
              rendered="#{empty from}"
              view="/Lea/admin/DomainNameEdit.xhtml"
                          id="create" 
                       value="#{localization.getTranslation('lea.createdomainname')}">
                  <f:param name="domainNameId"/>
              </s:button>
          </div>
              
          </h:form>
          
          <rich:panel>
              <f:facet name="header">#{localization.getTranslation('lea.domainsearchresult')}</f:facet>
          <div class="results" id="domainNameList">
      
          <h:outputText value="#{localization.getTranslation('lea.nosearchresultfordomainname')}" 
                     rendered="#{empty domainNameList.resultList}"/>
                     
          <rich:dataTable id="domainNameList" 
                      var="_domainName"
                    value="#{domainNameList.resultList}" 
                 rendered="#{not empty domainNameList.resultList}">
         
              <h:column>
                  <f:facet name="header">
                      <s:link styleClass="columnHeader"
                                   value="#{localization.getTranslation('lea.customer')} #{domainNameList.order=='customer.customer asc' ? messages.down : ( domainNameList.order=='customer.customer desc' ? messages.up : '' )}">
                          <f:param name="order" value="#{domainNameList.order=='customer.customer asc' ? 'customer.customer desc' : 'customer.customer asc'}"/>
                      </s:link>
                  </f:facet>
                  <h:outputText value="#{_domainName.customer.customer}"/>
              </h:column>
              <h:column>
                  <f:facet name="header">
                      <s:link styleClass="columnHeader"
                                   value="#{localization.getTranslation('lea.domainname')} #{domainNameList.order=='domainName.domainName asc' ? messages.down : ( domainNameList.order=='domainName.domainName desc' ? messages.up : '' )}">
                          <f:param name="order" value="#{domainNameList.order=='domainName.domainName asc' ? 'domainName.domainName desc' : 'domainName.domainName asc'}"/>
                      </s:link>
                  </f:facet>
                  <h:outputText value="#{_domainName.domainName}"/>
              </h:column>
       
              <h:column>
                  <f:facet name="header">
                      <s:link styleClass="columnHeader"
                                   value="#{localization.getTranslation('lea.comment')} #{domainNameList.order=='comment asc' ? messages.down : ( domainNameList.order=='comment desc' ? messages.up : '' )}">
                          <f:param name="order" value="#{domainNameList.order=='comment asc' ? 'comment desc' : 'comment asc'}"/>
                      </s:link>
                  </f:facet>
                  <h:outputText value="#{_domainName.comment}"/>
              </h:column>
              <h:column>
                  <f:facet name="header">#{localization.getTranslation('lea.action')}</f:facet>
                  <s:link view="/Lea/admin/#{empty from ? 'DomainNameEdit' : from}.xhtml" 
                         value="#{empty from ? localization.getTranslation('lea.edit') : localization.getTranslation('lea.select')}"
                            id="domainName">
                      <f:param name="domainNameId" 
                              value="#{_domainName.id}"/>
                  </s:link>
                  
                  
              </h:column>
          </rich:dataTable>
      
          </div>
          </rich:panel>
          
          <div class="tableControl">
            
              <s:link view="/Lea/admin/DomainNameList.xhtml" 
                  rendered="#{domainNameList.previousExists}" 
                     value="#{messages.left}#{messages.left} First Page"
                        id="firstPage">
                <f:param name="firstResult" value="0"/>
              </s:link>
              
              <s:link view="/Lea/admin/DomainNameList.xhtml" 
                  rendered="#{domainNameList.previousExists}" 
                     value="#{messages.left} Previous Page"
                        id="previousPage">
                  <f:param name="firstResult" 
                          value="#{domainNameList.previousFirstResult}"/>
              </s:link>
              
              <s:link view="/Lea/admin/DomainNameList.xhtml" 
                  rendered="#{domainNameList.nextExists}" 
                     value="Next Page #{messages.right}"
                        id="nextPage">
                  <f:param name="firstResult" 
                          value="#{domainNameList.nextFirstResult}"/>
              </s:link>
              
              <s:link view="/Lea/admin/DomainNameList.xhtml" 
                  rendered="#{domainNameList.nextExists}" 
                     value="Last Page #{messages.right}#{messages.right}"
                        id="lastPage">
                  <f:param name="firstResult" 
                          value="#{domainNameList.lastFirstResult}"/>
              </s:link>
              
          </div>
          
      
          
      </ui:define>
      
      </ui:composition>