0

これらの2つのリソースを見て、視覚的な力のページにページ付けを実装しました。 http://hisrinu.wordpress.com/2012/01/09/pagination-using-standardsetcontroller/ http://blog.jeffdouglas.com/2009/07/14/visualforce-page-with-pagination/

私のvisualforceページは日付パラメーターを受け入れ、カスタムオブジェクトレコードで検索を実行し、それらをApex:datatableに表示します。

これが私のコントローラーコードです。これは、次の前のリンクをクリックし始めるまで約1分間正常に機能し、その後、速度が低下してフリーズし始めます。

なぜこれが起こっているのか考えていますか?

更新:7/28:これはIEでのみ発生しています。私はIE9を持っています。

    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

いろいろなことが起こっていますが、初心者向けです:

同じ操作でstandardsetcontrollerを2回インスタンス化する:

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'));
   ...
}

標準セットコントローラーの単一インスタンスを作成し、それを1回インスタンス化してみてください。Database.querylocator(soql)後続の操作のために結果を更新する必要がある場合は、をリセットするよりも。ページネーションは、通常そのために使用されるため、おそらくその1つではありません。

それはあなたの問題の物乞いかもしれません、あなたはシステムデバッガーを使用していますか?例外はありますか?

于 2012-07-26T21:42:57.600 に答える
0

このプロジェクトは数ヶ月間行き詰まりました。私はそれに戻り、今回は新しいOFFSET機能を備えたSOQLを使用し、標準コントローラーを取り除きました。

実際の問題はIE9自体であり、詳細と解決策をここに投稿しました。IE9とVisualforceで同じ再レンダリングの問題を抱えている人に役立つことを願っています。

ありがとう。

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

于 2013-01-31T19:06:12.440 に答える