0

我在查看这两个资源的视觉力页面上实现了分页。 http://hisrnu.wordpress.com/2012/01/09/pagination-using-standardsetcontroller/ http://blog.jeffdouglas.com/2009/07/14/visualforce-page-with-pagination/

我的 visualforce 页面接受日期参数并在自定义对象记录上运行搜索并将它们显示在 Apex:datatable 中。

这是我的控制器代码。这工作正常,直到我开始连续单击下一个、前一个链接大约一分钟,然后它开始变慢并冻结。

知道为什么会这样吗?

更新:7/28:这只发生在 IE 中。我有 IE 9。

    public with sharing class FundingReportController { 

  // the soql without the order and limit
  private String soql {get;set;}

  Public Integer size{get;set;}
  Public Integer noOfRecords{get; set;} 


  //export to excel - returns a page reference to the AccountDataExcel page
    public PageReference exportToExcel() {
      return Page.fundingreportExcel;
    }

    //Instantiate the StandardSetController
    public ApexPages.StandardSetController con{get; set;}






   public List<Money_Transaction__c> moneyTransactions
    {
        get
        {
            if(con != null)
                return (List<Money_Transaction__c>)con.getRecords();
            else
                return null ;
        }
        set;
    }  


 // returns a list of wrapper objects for the sObjects in the current page set
    public List<Money_Transaction__c> getMoneyTransactions() {
    try{
        //moneyTransactions = new List<MoneyTransactionWrapper>();
        moneyTransactions = new List<Money_Transaction__c>();
        for (Money_Transaction__c mt: (List<Money_Transaction__c>)con.getRecords()) 
         {              
            moneyTransactions.add(mt); 
         }       

        }
          catch (Exception e) 
            {
               ApexPages.addMessage(new ApexPages.Message(ApexPages.Severity.ERROR, 'Code Error '+e));
            }
        return moneyTransactions ;
    }

  // the current sort direction. defaults to asc
  public String sortDir {
    get  { if (sortDir == null) {  sortDir = 'asc'; } return sortDir;  }
    set;
  }

  // the current field to sort by. defaults to last name
  public String sortField {
    get  { if (sortField == null) {sortField = 'Settlement_Date_First__c'; } return sortField;  }
    set;
  }

  // format the soql for display on the visualforce page
  public String debugSoql {
    //get { return soql + ' order by ' + sortField + ' ' + sortDir + ' limit 20'; }
    get { return soql + ' ' + sortDir; }
    set;
  }

  // init the controller and display some sample data when the page loads
  public FundingReportController() {

    moneyTransactions = new List<Money_Transaction__c>();
    //Default dates: 6 months before today
    Date fromDate = date.today();
    fromDate = fromDate.addMonths(-6);
    String fromDateStr = String.ValueOf(fromDate);
    //ApexPages.addMessage(new ApexPages.Message(ApexPages.Severity.ERROR,fromDateStr   ));
    //Default dates: Today
    Date toDate = date.today();    
    String toDateStr = String.ValueOf(toDate);




     soql = 'select ACH_Type__c, Settlement_Date_First__c, Total_ACH_Amount__c,Settlement__r.id,Settlement__r.name,Money_Movement_Type__c,Bank_Name__c,Bank_Account_Number__c,Tax_Batch__c,Payroll_Group_Detail__c from Money_Transaction__c where Settlement_Date_First__c <= '+ toDateStr + ' AND Settlement_Date_First__c >= ' + fromDateStr + ' AND ACH_Type__c != \'VHR DDP Disbursement\'';


     runQuery();
  }

  // toggles the sorting of query from asc<-->desc
  public void toggleSort() {
  //ApexPages.addMessage(new ApexPages.Message(ApexPages.Severity.ERROR, 'Inside Toggle'+soql + sortField +sortDir ));
    // simply toggle the direction
    sortDir = sortDir.equals('asc') ? 'desc' : 'asc';
    // run the query again
    runQuery();
  }

  // runs the actual query
  public void runQuery() {

    try {


          size=10;  

          ApexPages.addMessage(new ApexPages.Message(ApexPages.Severity.ERROR, 'Inside New Run query + StandardSetController '+soql + ' order by ' + sortField + ' ' + sortDir));
          con = new ApexPages.StandardSetController(Database.getQueryLocator(soql + ' order by ' + sortField + ' ' + sortDir + ' limit 100'));
          // sets the number of records in each page set
          con.setPageSize(size);
          noOfRecords = con.getResultSize();       



    } catch (Exception e) {
      ApexPages.addMessage(new ApexPages.Message(ApexPages.Severity.ERROR, 'Ooops! SOQL error '+soql ));
    }

  }

  // runs the search with parameters passed via Javascript
  public PageReference runSearch() {

    String fromDate = Apexpages.currentPage().getParameters().get('fromDate');
    String toDate = Apexpages.currentPage().getParameters().get('toDate');




    soql = 'select ACH_Type__c, Settlement_Date_First__c, Total_ACH_Amount__c,Settlement__r.id,Settlement__r.name,Money_Movement_Type__c,Bank_Name__c,Bank_Account_Number__c,Tax_Batch__c,Payroll_Group_Detail__c from Money_Transaction__c where Settlement_Date_First__c <= '+ toDate + ' AND Settlement_Date_First__c >= ' + fromDate + ' AND ACH_Type__c != \'VHR DDP Disbursement\'';
    con = new ApexPages.StandardSetController(Database.getQueryLocator(soql)); 


    // run the query again
    runQuery();

    return null;
  }


    // indicates whether there are more records after the current page set.
    public Boolean hasNext {
        get {
            return con.getHasNext();

        }
        set;
    }

    // indicates whether there are more records before the current page set.
    public Boolean hasPrevious {
        get {
            return con.getHasPrevious();
        }
        set;
    }

    // returns the page number of the current page set
    public Integer pageNumber {
        get {
            return con.getPageNumber();
        }
        set;
    }

    // returns the first page of records
    public void first() { 

        try{
        con.first();  


        }
        catch (Exception e) 
            {
               ApexPages.addMessage(new ApexPages.Message(ApexPages.Severity.ERROR, 'Code Error '+e));
            }

    }

    // returns the last page of records
    public void last() {   

        try{
        con.last();        

        }
        catch (Exception e) 
            {
               ApexPages.addMessage(new ApexPages.Message(ApexPages.Severity.ERROR, 'Code Error '+e));
            }
    }

    // returns the previous page of records
    public void previous() {   

         try{
            con.previous();      

            }
            catch (Exception e) 
            {
               ApexPages.addMessage(new ApexPages.Message(ApexPages.Severity.ERROR, 'Code Error '+e));
            }
        }

    // returns the next page of records
    public void next() {  
    try{   

        con.next();      

        }
         catch (Exception e) 
            {
               ApexPages.addMessage(new ApexPages.Message(ApexPages.Severity.ERROR, 'Code Error '+e));
            }

    }       




}
4

2 回答 2

0

发生了很多事情,但对于初学者来说:

您在同一操作中两次实例化标准集控制器:

PageReference runsearch(){
   ...
   con = new ApexPages.StandardSetController(Database.getQueryLocator(soql)); 
   ..
   runQuery();
}

void runQuery(){
   ...
   con = new ApexPages.StandardSetController(Database.getQueryLocator(soql + ' order by ' + sortField + ' ' + sortDir + ' limit 100'));
   ...
}

尝试制作标准集控制器的单个实例并实例化一次。Database.querylocator(soql)如果您需要为后续操作更新结果,则重新设置。尽管分页可能不是其中之一,但它通常用于此目的。

这可能是您的问题的乞求,您是否使用系统调试器?你有任何例外吗?

于 2012-07-26T21:42:57.600 回答
0

这个项目被搁置了几个月。我回到了它,这一次我使用 SOQL 和新的 OFFSET 功能并摆脱了标准控制器。

实际问题是 IE9 本身,我已经在此处发布了详细信息和解决方案。我希望它可以帮助那些在 IE9 和 Visualforce 上遇到相同重新渲染问题的人。

谢谢。

https://salesforce.stackexchange.com/questions/7917/visualforce-major-grief-with-ie9-ajax-refresh-rerender-issues

于 2013-01-31T19:06:12.440 回答