수색…


소개

Slaesforce StandardSetController는 sObject의 List 만 보유합니다. 래퍼 클래스 객체의 보유 목록을 보유하지 않습니다. 아래의 소스 코드는 판매원에서 래퍼 클래스를 사용하여 페이지 매김을 사용하는 방법을 보여줍니다.

페이지 네이션 컨트롤러

코드 예제 : 이제 페이지 매김 컨트롤러 만들기로 시작하십시오.

public with sharing class Pagination {

}

나는 모든 연락처를 페이지 매김 형태로 보여줄 것이며, 각 연락처에 대해 하나의 체크 박스가 선택되어 있거나 선택이 해제되어 있어야 연락처에 대한 삭제 작업을 수행 할 수 있습니다. 그래서 연락처 및 부울 변수를 선택 래퍼 클래스를 만들 수 있어야합니다. 먼저 컨트롤러 쪽 매김에 대한 래퍼 클래스를 생성합니다. 코드 아래에 페이지 매김 컨트롤러에 삽입하십시오.

 public class contactWrapper{
        public Contact cont {get;set;}
        public Boolean isSelected{get;set;}
        public contactWrapper(contact c,Boolean s)
        {
            cont=c;
            isSelected=s;
        }
    }

이제 Apex에서 StandardSetController의 도움을 받아 페이지 매김 (Paginate)으로 데이터 검색하기. StandardSetController는 Visualforce 페이지에서 사용자 정의 코드를 크게 단순화하는 데 사용할 수있는 내장 기능이있는 매우 강력한 도구입니다. 서버는 요청 된 페이지에 대한 데이터 만 반환하기 때문에 StandardSetController는 특히 SOQL을 사용하는 동안 얻을 수있는 뷰 상태와 비교하여 뷰 상태를 크게 줄일 수 있습니다.

 Public Integer noOfRecords{get; set;} // Future reference in Visual force Page
    Public Integer size{get;set;}  // Future reference in Visual force Page
    public final Integer Page_Size=10; // Number records in a Page should be displayed 

 public ApexPages.StandardSetController setCon {
        get{
            if(setCon == null){
                size=Page_Size;
                string queryString = 'Select Id,Name, Email, Birthdate, Phone, MobilePhone from Contact order by Name';
                setCon = new ApexPages.StandardSetController(Database.getQueryLocator(queryString));
                setCon.setPageSize(size);
                noOfRecords = setCon.getResultSize();
            }
            return setCon;
        }set;
    }

이제 setCon.getRecords ()에 대한 요청이있을 때마다 setCon에서 처음 10 개의 연락처 레코드를 검색 할 때마다 Variable setCon에 연락처가 있습니다. 여기에 간단한 래퍼 클래스를 만들어 데모를 보여줍니다. 요구 사항에 따라 고유 한 래퍼 클래스를 만들 수 있습니다. 하지만 항상 ApexPages.StandardSetController는 sObject의 List 만 보유하고 있으므로 래퍼 클래스 객체의 목록을 보유하지 않습니다. 그것이 내가 미래를 다른 방식으로 달성하기 위해 아래에 추가 코드를 작성한 이유입니다. 아래 코드는 연락처 목록을 래퍼 클래스 개체 목록으로 변환하므로 Visual Force 페이지에서 연락처를 호출 할 때 래퍼 클래스 개체 목록을 수신합니다.

 public list<contactWrapper> contWpr{get;set;} 
    public set<id> selectedContactIds{ get;private set;} // to maintain state of the selected contact
                                                         // through out paginating 

    public Pagination() {
       selectedContactIds=new  set<id>();
    }

      Public list<contactWrapper> getContacts(){
         contWpr =new list<contactWrapper>();
        for(Contact c: (List<Contact>)setCon.getRecords())
            if(selectedContactIds.contains(c.id))
                contWpr.add(new contactWrapper(c,true));
                else
                contWpr.add(new contactWrapper(c,false));
        return contWpr;
    }

이제 결과를 생성하는 코드를 작성했지만 페이지를 탐색하는 방법은 무엇입니까? 이것은 ApexPages.StandardSetController.Look을 사용하면 StandardSetController의 코드 뷰티에서 볼 수 있으며, 페이지 번호를 유지할 필요가없고, 오프셋 및 제한 등을 쉽게 할 수 있습니다. StandardSetController 메소드를 사용하십시오. 아래 코드를 페이지 매김 컨트롤러에 복사하십시오.

public Boolean hasNext {
        get {
            return setCon.getHasNext();
        }
        set;
    }
    public Boolean hasPrevious {
        get {
            return setCon.getHasPrevious();
        }
        set;
    }

    public Integer pageNumber {
        get {
            return setCon.getPageNumber();
        }
        set;
    }

    public void first() {
        setCon.first();
        // do you operation here 
    }

    public void last() {
        setCon.last();
            // do you operation here 
    }

    public void previous() {
        setCon.previous();
            // do you operation here 
    }

    public void next() {
        setCon.next();
            // do you operation here 
    }

귀하의 거의 완료 연락처로 페이지 매김. 마지막으로 몇 가지 방법은 내 전체 페이지 기능을 수행하기 위해 추가했습니다. 앞서 언급했듯이 연락처를 선택하고 선택한 연락처에서 삭제 작업을 수행하기위한 추가 확인란이 있습니다.

public void contactSelection()
    {
        Id id=(Id)ApexPages.currentPage().getParameters().get('cId');
        if(selectedContactIds.contains(id))
            selectedContactIds.remove(id);
            else
            selectedContactIds.add(id);
    }

 public void deleteContacts()
    {
        List<contact> contactToDelete=[select id from contact where id in :selectedContactIds];
        if(contactToDelete.size()!=0)  //   if(!contactToDelete.isEmpty()) // Best Practice 
           { 
                try {  delete contactToDelete; }  // You may get Exception if you try to delete the 
                                                // related contact ,include try block to avoid error.
                catch(exception ex){ System.debug(ex); }
                refresh();
           }
    }   

 public pageReference refresh() {
        setCon = null;
        selectedContactIds=new set<id>();
        getContacts();
        setCon.setPageNumber(1);
        return null;
    }


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow