1 Reply Latest reply on Apr 1, 2009 10:01 PM by scott duke

    Pagination between tabs

    scott duke Novice

      I am hoping someone might have a solution to what I am about to describe.


      Using...
      Seam-2.1.1.GA
      Richfaces-3.3.0.GA


      I have a detail screen for user (uzer.xhtml). On the bottom of the screen are 2 tabs. One for phone numbers (phone.xhtml) and the other for addresses (address.xhtml). My application framework is similar to that described in Seam in Action.


      For testing purposes, I have set the maxResults to 3 within phoneList.java and to 1 within address.java. I created 9 different phone numbers and 2 addresses for this test user.


      On the initial display of the user, the phone tab is the default tab displaying the first 3 phone numbers. I advance the page to the next 3 phone numbers. So far, so good. Then, when I click on the address tab, I am getting the message no addresses found and on the bottom of the tab I see the first page and previous page. If I click on on of those, one of the addresses appears.


      It appears as if the pagination is being carried over from one tab to another. Is there a way to prevent this from happening??? Do I need to pass the page number as a param and set it to 0 every time I change tabs?


      AddressList.page.xml


      <param name="firstResult" value="#{addressList.firstResult}" />
           <param name="addressListSort" value="#{addressList.orderColumn}"/>
           <param name="dir" value="#{addressList.orderDirection}" />     
      



      PhoneList.page.xml


           <param name="firstResult" value="#{phoneList.firstResult}" />
           <param name="phoneListSort" value="#{phoneList.orderColumn}" />
           <param name="dir" value="#{phoneList.orderDirection}" />
      



      uzer.xhtml


      <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:a4j="http://richfaces.org/a4j"
           xmlns:rich="http://richfaces.org/rich" 
           template="/layout/template.xhtml">
      
           <ui:define name="body">
      
                <rich:panel>
                     <f:facet name="header">User Details</f:facet>
       
                   ...
               
                     <div style="clear: both" />
      
                </rich:panel>
      
                <div class="actionButtons">
                     <s:button view="/role/admin/UzerEdit.xhtml"
                                 id="edit" 
                                 value="Edit" /> 
                     <s:button view="#{empty uzerFrom ? '/role/admin/UzerList' : uzerFrom}.xhtml" 
                                 id="done"
                                 value="Done" />
                </div>
      
                <rich:tabPanel switchType="ajax">
      
                     <rich:tab label="Phone Numbers">
                          <ui:include src="/role/admin/PhoneTable.xhtml">
                             <ui:param name="phoneFrom" value="/role/admin/Uzer"/>
                         </ui:include>
      
                          <div class="actionButtons">
                               <s:button id="addPhone" value="Add Phone Number" 
                                         view="/role/admin/PhoneEdit.xhtml">
                                    <f:param name="uzerId" value="#{uzerHome.instance.id}" />
                                    <f:param name="phoneFrom" value="/role/admin/Uzer" />
                               </s:button>
                          </div>
                     </rich:tab>
                     
                     <rich:tab label="Addresses">
                          <ui:include src="/role/admin/AddressTable.xhtml">
                             <ui:param name="addressFrom" value="/role/admin/Uzer"/>
                         </ui:include>
      
                          <div class="actionButtons">
                               <s:button id="addAddress" value="Add Address" 
                                         view="/role/admin/AddressEdit.xhtml">
                                    <f:param name="uzerId" value="#{uzerHome.instance.id}" />
                                    <f:param name="addressFrom" value="/role/admin/Uzer" />
                               </s:button>
                          </div>
                     </rich:tab>
                     
      
                </rich:tabPanel>
      
                
           </ui:define>
      
      </ui:composition>
      



      PhoneTable.xhtml


      <a4j:form id="phoneTableForm"
           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:a4j="http://richfaces.org/a4j"
           xmlns:rich="http://richfaces.org/rich"
           template="/layout/template.xhtml"     >
                     
           <div class="association" id="phones">
                          
                  <h:outputText value="No phone number exists" 
                         rendered="#{empty phoneList.resultList}"/>    
       
                  <rich:dataTable id="phoneList" 
                                 var="_phone"
                             value="#{phoneList.resultList}" 
                           rendered="#{not empty phoneList.resultList}">
                                          
                                          
                   <h:column>
                          <f:facet name="header">
                               <s:decorate template="/layout/sort.xhtml">
                                    <ui:param name="entityListName" value="phoneList"/>
                                    <ui:param name="entityList" value="#{phoneList}"/>
                                    <ui:param name="propertyLabel" value="Name"/>
                                    <!-- doesn't support two sort fields -->
                                    <ui:param name="propertyPath" value="uzer.name"/>
                               </s:decorate>
                          </f:facet>
                       #{_phone.uzer.name}
                     </h:column>                     
                     
      
                   ...
      
                                     
                   <h:column>
                       <f:facet name="header">Action</f:facet>
                       <s:link view="#{empty from ? '/role/admin/Phone' : from}.xhtml" 
                              value="Select" 
                                 id="phoneSelect"
                             propagation="none">                           
                            <f:param name="phoneFrom" 
                                   value="#{phoneFrom}"/>
                           <f:param name="phoneId" 
                                   value="#{_phone.id}"/>
                       </s:link>
                   </h:column>
                            
                  </rich:dataTable>
      
            </div>
      
            <div class="tableControl">
            
                <s:link view="#{phoneFrom}.xhtml"
                                 rendered="#{phoneList.previousExists}" 
                                    value="#{messages.left}#{messages.left} First Page"
                                       id="phoneListFirstPage">
                               <f:param name="firstResult" value="0"/>
                </s:link>
                             
                <s:link view="#{phoneFrom}.xhtml"
                                 rendered="#{phoneList.previousExists}" 
                                    value="#{messages.left} Previous Page"
                                       id="phoneListPreviousPage">
                                 <f:param name="firstResult" 
                                         value="#{phoneList.previousFirstResult}"/>
                </s:link>
                             
                <s:link view="#{phoneFrom}.xhtml"
                                 rendered="#{phoneList.nextExists}" 
                                    value="Next Page #{messages.right}"
                                       id="phoneListNextPage">
                                 <f:param name="firstResult" 
                                         value="#{phoneList.nextFirstResult}"/>
                </s:link>
                             
                <s:link view="#{phoneFrom}.xhtml"
                                 rendered="#{phoneList.nextExists}" 
                                    value="Last Page #{messages.right}#{messages.right}"
                                       id="phoneListLastPage">
                                 <f:param name="firstResult" 
                                         value="#{phoneList.lastFirstResult}"/>
                </s:link>
              
           </div>
      </a4j:form>
      



      AddressTable.xhtml


      <a4j:form id="addressTableForm"
                  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:a4j="http://richfaces.org/a4j"
                 xmlns:rich="http://richfaces.org/rich">
                
           <div class="association" id="addresss">
                          
                  <h:outputText value="No address exists" 
                         rendered="#{empty addressList.resultList}"/>    
       
                  <rich:dataTable id="addressList" 
                                 var="_address"
                             value="#{addressList.resultList}" 
                           rendered="#{not empty addressList.resultList}">
                 
                     <h:column>
                          <f:facet name="header">
                               <s:decorate template="/layout/sort.xhtml">
                                    <ui:param name="entityListName" value="addressList"/>
                                    <ui:param name="entityList" value="#{addressList}"/>
                                    <ui:param name="propertyLabel" value="Name"/>
                                    <!-- doesn't support two sort fields -->
                                    <ui:param name="propertyPath" value="uzer.name"/>
                               </s:decorate>
                          </f:facet>
                       #{_address.uzer.name}
                   </h:column>   
      
                     ...      
                   
                   <h:column>
                       <f:facet name="header">
                               <s:decorate template="/layout/sort.xhtml">
                                    <ui:param name="entityListName" value="addressList"/>
                                    <ui:param name="entityList" value="#{addressList}"/>
                                    <ui:param name="propertyLabel" value="Address 1"/>
                                    <!-- doesn't support two sort fields -->
                                    <ui:param name="propertyPath" value="address.address1"/>
                               </s:decorate>
                       </f:facet>
                       #{_address.address1}
                   </h:column>
                   
                   ...      
                        
                     
                            
                   <h:column>
                       <f:facet name="header">Action</f:facet>
                       <s:link view="#{empty from ? '/role/admin/Address' : from}.xhtml" 
                              value="Select"
                                 id="addressSelect"
                        propagation="none">                     
                           <f:param name="addressFrom" 
                                   value="#{addressFrom}"/>
                           <f:param name="addressId" 
                                   value="#{_address.id}"/>
                       </s:link>         
                   </h:column>     
                            
                  </rich:dataTable>
      
            </div>
      
            <div class="tableControl">
            
                <s:link view="#{addressFrom}.xhtml"
                                 rendered="#{addressList.previousExists}" 
                                    value="#{messages.left}#{messages.left} First Page"
                                       id="addressListFirstPage">
                               <f:param name="firstResult" value="0"/>
                </s:link>
                             
                <s:link view="#{addressFrom}.xhtml"
                                 rendered="#{addressList.previousExists}" 
                                    value="#{messages.left} Previous Page"
                                       id="addressListPreviousPage">
                                 <f:param name="firstResult" 
                                         value="#{addressList.previousFirstResult}"/>
                </s:link>
                             
                <s:link view="/role/admin/AddressTable.xhtml"
                                 rendered="#{addressList.nextExists}" 
                                    value="Next Page #{messages.right}"
                                       id="addressListNextPage">
                                 <f:param name="firstResult" 
                                         value="#{addressList.nextFirstResult}"/>
                </s:link>
                             
                <s:link view="#{addressFrom}.xhtml"
                                 rendered="#{addressList.nextExists}" 
                                    value="Last Page #{messages.right}#{messages.right}"
                                       id="addressListLastPage">
                                 <f:param name="firstResult" 
                                         value="#{addressList.lastFirstResult}"/>
                </s:link>
              
           </div>
      </a4j:form>