function readOnly(count){ }
Starting November 20, the site will be set to read-only. On December 4, 2023,
forum discussions will move to the Trailblazer Community.
+ Start a Discussion
icemft1976icemft1976 

Can anyone get the Pagination example to work?

I copied the example in the Visualforce documents directly from the webpage . The 'next/previous' links  don't work. No javascript errors, just a page refresh.  like it's not rerunning the query.

 

Am I missing something? I can't imagine the example is actually broken....Do I have to write my own paginig handlers?

 

thanks for any advice,

Al

icemft1976icemft1976

So I was able to piece together my own pagination from other forum posts - here goes.

 

Maybe I misunderstood the 'custom list controller' example and they implied I need to extend the example to make it funciton?

 

Controller

 

public class opportunityList2Con {
  // ApexPages.StandardSetController must be instantiated  
    
  // for standard list controllers  
    
    public ApexPages.StandardSetController setCon {
        get {
            if(setCon == null) {
                setCon = new ApexPages.StandardSetController(Database.getQueryLocator(
                      [select name,closedate from Opportunity]));
            }
            return setCon;
        }
        set;
    }

    // Initialize setCon and return a list of records  
    
    public List<Opportunity> getOpportunities() {
         return (List<Opportunity>) setCon.getRecords();
    }
    
    public PageReference next() {
        
        Integer p = setCon.getPageNumber();
        
        if(hasNext) {
            setCon.setPageNumber(p+1);
        }
        
        return null;
    }
    
    public PageReference previous() {
                
        Integer p = setCon.getPageNumber();
        
        if(hasPrevious) {
            setCon.setPageNumber(p-1);
        }
        
        return null;
    }
    
    public Boolean hasPrevious {
        get {
            return setCon.getHasPrevious();
        }
    }
    
    public Boolean hasNext {
        get {
            return setCon.getHasNext();
        }
    }

}

 

 

Page

 

<apex:page controller="opportunityList2Con">
<apex:form>
    <apex:pageBlock >
    <apex:pageBlockButtons>      
      <apex:commandLink action="{!previous}">Previous</apex:commandlink>
      <apex:commandLink action="{!next}">Next</apex:commandlink>
    </apex:pageBlockButtons>
        <apex:pageBlockTable value="{!opportunities}" var="o">
            <apex:column value="{!o.name}"/>
            <apex:column value="{!o.closedate}"/>
        </apex:pageBlockTable>
    </apex:pageBlock>
</apex:form>
</apex:page>

 

 

 

 

Pradeep_NavatarPradeep_Navatar

Find below a sample code to elaborate the Pagination :


VF CODE:
    <apex:page controller="MyPagingController" tabStyle="Account">
        <apex:sectionHeader title="Accounts List with Paging"></apex:sectionHeader>
        <apex:form >
        <apex:pageBlock title="" id="pageBlock">
        <apex:pageBlockButtons location="top">
        <apex:commandButton value="View" action="{!ViewData}" id="theButton" rerender="pageBlock"></apex:commandButton>
        </apex:pageBlockButtons>
        <apex:pageMessages ></apex:pageMessages>
        <div align="right" style="display:{!IF(NOT(ISNULL(accounts)),'block','none')}">
        <font size="1pt">Page #:&nbsp;<apex:outputLabel value="{!PageNumber}"/>&nbsp;out of&nbsp;<apex:outputLabel value="{!totalPageNumber}"/>&nbsp;&nbsp;&nbsp;&nbsp;</font>
        <apex:commandButton value="Previous" action="{!previousBtnClick}" disabled="{!previousButtonEnabled}" reRender="pageBlock"></apex:commandButton>
        <apex:commandButton value="Next" action="{!nextBtnClick}" reRender="pageBlock" disabled="{!nextButtonDisabled}" ></apex:commandButton>
        </div>
        <br/><br/>
        <apex:pageBlockTable value="{!accounts}" var="a" rendered="{!NOT(ISNULL(accounts))}" rows="{!PageSize}">
        <apex:column >
        <apex:facet name="header">Account Name</apex:facet>
        <apex:outputLink value="/{!a.Id}" >{!a.Name}</apex:outputLink>
        </apex:column>
        <apex:column value="{!a.Phone}"></apex:column>
        <apex:column value="{!a.Fax}"></apex:column>
        </apex:pageBlockTable>
        <div align="right" style="display:{!IF(NOT(ISNULL(accounts)),'block','none')}">
        <br/>
        <font size="1pt">Page #:&nbsp;<apex:outputLabel value="{!PageNumber}"/>&nbsp;out of&nbsp;<apex:outputLabel value="{!totalPageNumber}"/>&nbsp;&nbsp;&nbsp;&nbsp;</font>
        <apex:commandButton value="Previous" action="{!previousBtnClick}" disabled="{!previousButtonEnabled}" reRender="pageBlock"></apex:commandButton>
        <apex:commandButton value="Next" action="{!nextBtnClick}" reRender="pageBlock" disabled="{!nextButtonDisabled}" ></apex:commandButton>
        </div>

        </apex:pageBlock>
        </apex:form>
    </apex:page>

Controller code:
    public class MyPagingController
    {
    private List<Account> accounts;
    private List<Account> pageAccounts;
    private Integer pageNumber;
    private Integer pageSize;
    private Integer totalPageNumber;
    public Integer getPageNumber()
    {
    return pageNumber;
    }
    public List<Account> getAccounts()
    {
    return pageAccounts;
    }
    public Integer getPageSize()
    {
    return pageSize;
    }
    public Boolean getPreviousButtonEnabled()
    {
    return !(pageNumber > 1);
    }
    public Boolean getNextButtonDisabled()
    {
    if (accounts == null) return true;
    else
    return ((pageNumber * pageSize) >= accounts.size());
    }
    public Integer getTotalPageNumber()
    {
    if (totalPageNumber == 0 && accounts !=null)
    {
    totalPageNumber = accounts.size() / pageSize;
    Integer mod = accounts.size() - (totalPageNumber * pageSize);
    if (mod > 0)
    totalPageNumber++;
    }
    return totalPageNumber;
    }
    public MyPagingController()
    {
    pageNumber = 0;
    totalPageNumber = 0;
    pageSize = 20;
    ViewData();
    }
    public PageReference ViewData()
    {
    accounts = null;
    totalPageNumber = 0;
    BindData(1);
    return null;
    }
    private void BindData(Integer newPageIndex)
    {
    try
    {
    if (accounts == null)
    accounts = [Select id, Name, Phone, Fax from Account limit 1000];
    pageAccounts = new List<Account>{};
    Transient Integer counter = 0;
    Transient Integer min = 0;
    Transient Integer max = 0;
    if (newPageIndex > pageNumber)
    {
    min = pageNumber * pageSize;
    max = newPageIndex * pageSize;
    }
    else
    {
    max = newPageIndex * pageSize;
    min = max - pageSize;

    }
    for(Account a : accounts)
    {
    counter++;
    if (counter > min && counter <= max)
    pageAccounts.add(a);
    }
    pageNumber = newPageIndex;
    if (pageAccounts == null || pageAccounts.size() <= 0)
    ApexPages.addmessage(new ApexPages.message(ApexPages.severity.INFO,'Data not available for this view.'));
    }
    catch(Exception ex)
    {
    ApexPages.addmessage(new ApexPages.message(ApexPages.severity.FATAL,ex.getMessage()));
    }
    }
    public PageReference nextBtnClick() {
    BindData(pageNumber + 1);
    return null;
    }
    public PageReference previousBtnClick() {
    BindData(pageNumber - 1);
    return null;
    }
    }

Hope this helps.