上篇内容为Pagination基类的封装,此篇接上篇内容描述如何调用Pagination基类。

首先先创建一个sObject,起名Company info,此object字段信息如下:

为了国际化考虑,setup中输入框输入translate对字段的label进行国际化处理,此处只处理中文。

sobject创建好之后,我们便要进行设计。首先要有一个helper类,对相关查询方法进行封装,然后controller层进行调用以及和page页面交互一个page页面显示。

MyPaginationEnhancement设计:

 public without sharing class MyPaginationEnhancement{

     public static final Integer DEFAULT_PAGE_SIZE=20;

     public MyPaginationEnhancement() {
} public MyPaginationEnhancement(ApexPages.StandardSetController controller) {
} public MyPaginationEnhancement(ApexPages.StandardController controller) {
} private List<sObject> sObjectList; private String countStr; private String queryStr; private String queryCondition; private String groupBy; private String orderBy; private Integer offset=0; public List<sObject> resultList{
get {
if(sObjectList == null){
return new List<sObject>();
}
return sObjectList;
}
set;
} public List<sObject> getQueryResult(String countStr,String queryStr,String queryCondition){
setQueryCondition(countStr,queryStr,queryCondition,null,null);
buildAndQuery();
return sObjectList;
} public List<sObject> getQueryResult(String countStr,String queryStr,String queryCondition,String groupBy,String orderBy){
setQueryCondition(countStr,queryStr,queryCondition,groupBy,orderBy);
buildAndQuery();
return sObjectList;
} public List<sObject> updateQueryResult(String queryStr,String queryCondition,String groupBy,String orderBy){
String querySql = queryStr;
if(queryCondition!=null){
querySql += queryCondition;
}
if(groupBy!=null){
querySql +=groupBy;
}
if(orderBy!=null){
querySql +=orderBy;
}
sObjectList = Database.query(querySql);
return sObjectList;
} private void setQueryCondition(String countStr,String queryStr,String queryCondition,String groupBy,String orderBy){
this.countStr=countStr;
this.queryStr=queryStr;
this.queryCondition=queryCondition;
this.groupBy=groupBy;
this.orderBy=orderBy;
} private void buildAndQuery(){
List<String> queryArgs = new List<String>();
List<String> countArgs= new List<String>();
if(String.isNotBlank(countStr)){
countArgs.add(countStr);
}
if(String.isNotBlank(queryStr)){
queryArgs.add(queryStr);
}
if(String.isNotBlank(queryCondition)){
queryArgs.add(queryCondition);
countArgs.add(queryCondition);
}
if(String.isNotBlank(groupBy)){
queryArgs.add(groupBy);
countArgs.add(groupBy);
}
if(String.isNotBlank(orderBy)){
queryArgs.add(orderBy);
}
initTotalNum(countArgs);
queryResult(queryArgs);
} private void initTotalNum(List<String> countArgs){
String countqueryStr=String.join(countArgs,' '); if(String.isNotBlank(countqueryStr)){ totalNumber=Database.countquery(countqueryStr);
} else {
totalNumber=0;
} if(totalNumber !=0 && pageNumber==0){
pageNumber = 1;
}
} private List<sObject> queryResult(List<String> queryArgs){
queryStr=String.join(queryArgs,' ');
if(String.isBlank(queryStr)){
sObjectList = new List<sObject>();
}else{
String querySql=queryStr+' limit '+pageSize+' offset '+offset; sObjectList = Database.query(querySql);
}
return sObjectList;
} public void changePageSize(Integer pageSize) {
if (pageSize!=null){
this.pageSize=pageSize;
}
} public Boolean hasNext {
get {
return pageSize*pageNumber<totalNumber;
}
set;
} public Boolean hasPrevious {
get {
return pageSize*(pageNumber-1)>0;
}
set;
} public Integer pageNumber {
get {
if(pageNumber==null){
pageNumber=0;
}
return pageNumber;
}
set;
} public Integer pageSize{
get{
if(pageSize==null){
pageSize=DEFAULT_PAGE_SIZE;
}
return pageSize;
}
set;
} public Integer totalNumber{
get{
if(totalNumber==null){
totalNumber=0;
}
return totalNumber;
}
set;
} public Integer totalPage{
get{
if(totalNumber==0 || math.mod(totalNumber,pageSize)!=0){
return totalNumber/pageSize+1;
}else{
return totalNumber/pageSize;
}
}
set;
} public Boolean hasRecord{
get {
if(totalNumber!=0){
return true;
}else{
return false;
}
}
set;
} public void first() {
offset=0;
pageNumber=1;
} public void last() {
offset=(totalPage-1)*pageSize;
pageNumber=totalPage;
} public void previous() {
pageNumber--;
if(pageNumber<0){
pageNumber=0;
offset=0;
}else{
offset=(pageNumber-1)*pageSize;
}
} public void next() {
pageNumber++;
if(pageNumber>totalPage){
pageNumber=totalPage;
}
offset=(pageNumber-1)*pageSize;
} //指定页
public virtual void specifiedPage(Integer pageNumber) {
this.pageNumber = pageNumber;
if(pageNumber < 0) {
pageNumber = 0;
offset = 0;
} else {
offset = (pageNumber - 1) * pageSize;
}
} public Integer getOffset(){
return offset;
} public Integer getSize(){
return pageSize;
} }

MyPaginationEnhancement

CompanyHelper设计:

 public without sharing class CompanyHelper {

     public static final String BASE_COMPANY_QUERY = 'SELECT Company_Code_Unique__c, Name,' +
' Company_Name__c, Company_Phone__c, Company_Place__c,' +
' Company_Type__c, CreatedById, CreatedDate, IsDeleted,' +
' Employees_Number__c, LastModifiedById, LastModifiedDate,' +
' OwnerId, Id, SystemModstamp FROM Company_Info__c where IsDeleted = false';
public static final String BASE_COMPANY_COUNT_QUERY = 'SELECT count() from Company_Info__c where IsDeleted = false';
public static MyPaginationEnhancement getCompanyList(String companyName,String companyCode,String companyPlace,String companyType,MyPaginationEnhancement pagination) {
String queryCondition= '';
String orderBy ='';
if(companyName != null) {
queryCondition += ' and Company_Name__c like %\'' + companyName + '%\'';
}
if(companyCode != null) {
queryCondition += ' and Company_Code_Unique__c like %\'' + companyCode + '%\'';
}
if(companyPlace != null) {
queryCondition += ' and Company_Place__c like %\'' + companyPlace + '%\'';
}
if(companyType != null) {
queryCondition += ' and Company_Type__c like %\'' + companyType + '%\'';
} orderBy = ' order by createddate'; pagination.getQueryResult(BASE_COMPANY_COUNT_QUERY,BASE_COMPANY_QUERY,queryCondition,null,orderBy);
// pagination.getQueryResult();
return pagination;
}
}

CompanyHelper

CompanyController设计

 public with sharing class CompanyController {

     public Map<String,String> parameters;

     public CompanyController() {
parameters=ApexPages.currentPage().getParameters();
init();
} public MyPaginationEnhancement pagination = new MyPaginationEnhancement(); public String companyName{get;set;} public String companyCode{get;set;} public String companyPlace{get;set;} public String companyType{get;set;} public void init() {
queryByCondition();
} public void queryByCondition() {
CompanyHelper.getCompanyList(companyName,companyCode,companyPlace,companyType,pagination);
system.debug('====================CurrentPageNumber : ' + pagination.pageNumber);
} public MyPaginationEnhancement resultPagination{
get{
if(pagination ==null){
pagination =new MyPaginationEnhancement();
}
return pagination;
}
set;
} public List<Company_Info__c> resultList{
get{
if(pagination==null || pagination.resultList==null){
return new List<Company_Info__c>();
}
return pagination.resultList;
}
set;
} public void firstPage() {
pagination.first();
queryByCondition();
} public void lastPage() {
pagination.last();
queryByCondition();
} public void previousPage() {
pagination.previous();
queryByCondition();
} public void nextPage() {
pagination.next();
queryByCondition();
}
}

CompanyController

CompanyListPage设计

 <apex:page controller="CompanyController">
<apex:form >
<apex:outputPanel layout="block">
<apex:outputPanel layout="block">
<apex:outputPanel layout="block">
<apex:outputPanel layout="block" id="companyList">
<apex:dataTable align="center" value="{!resultList}" var="companyInfo">
<apex:column style="width:180px;">
<apex:facet name="header">{!$ObjectType.Company_Info__c.fields.Company_Code_Unique__c.label}</apex:facet>
<apex:outputText value="{!companyInfo.Company_Code_Unique__c}" />
</apex:column>
<apex:column style="width:180px;">
<apex:facet name="header">{!$ObjectType.Company_Info__c.fields.Company_Name__c.label}</apex:facet>
<apex:outputText value="{!companyInfo.Company_Name__c}" />
</apex:column>
<apex:column style="width:225px;">
<apex:facet name="header">{!$ObjectType.Company_Info__c.fields.Company_Place__c.label}</apex:facet>
<apex:outputText value="{!companyInfo.Company_Place__c}" />
</apex:column>
<apex:column style="width:225px;">
<apex:facet name="header">{!$ObjectType.Company_Info__c.fields.Company_Type__c.label}</apex:facet>
<apex:outputText value="{!companyInfo.Company_Type__c}" />
</apex:column>
<apex:column style="width:225px;">
<apex:facet name="header">{!$ObjectType.Company_Info__c.fields.Employees_Number__c.label}</apex:facet>
<apex:outputText value="{!companyInfo.Employees_Number__c}" />
</apex:column>
<apex:column style="width:500px;">
<apex:facet name="header">操作</apex:facet> </apex:column>
</apex:dataTable> <apex:outputPanel layout="block" styleClass="paginator"
style="padding:0px;">
<apex:panelGrid columns="2" style="width:100%;"
styleClass="az_text_table" rowClasses="paginator,paginator">
<apex:outputText rendered="{!!resultPagination.hasRecord}"
value="第 0 页,共 0 页,每页 {!resultPagination.pageSize} 条" />
<apex:outputText rendered="{!resultPagination.hasRecord}"
value="第 {!resultPagination.pageNumber} 页,共 {!resultPagination.totalPage} 页,每页 {!resultPagination.pageSize} 条" />
<apex:panelGroup >
<apex:outputPanel >
<apex:outputText value="首页"
rendered="{!(!resultPagination.hasRecord)||(!resultPagination.hasPrevious)}"
style="border: solid 1px #ddd;padding:1px 6px;background: #e8e8e9;margin-right:5px;"></apex:outputText>
<apex:commandLink action="{!firstPage}"
rendered="{!resultPagination.hasRecord && resultPagination.hasPrevious}"
immediate="true" reRender="companyList" value="首页"
style="margin-right:5px;" />
</apex:outputPanel>
<apex:outputPanel >
<apex:outputText value="上一页"
rendered="{!!resultPagination.hasRecord || (!resultPagination.hasPrevious)}"
style="border: solid 1px #ddd;padding:1px 6px;background: #e8e8e9;margin-right:5px;"></apex:outputText>
<apex:commandLink action="{!previousPage}"
rendered="{!resultPagination.hasRecord && resultPagination.hasPrevious}"
immediate="true" reRender="companyList" value="上一页"
style="margin-right:5px;" />
</apex:outputPanel>
<apex:outputPanel >
<apex:outputText value="{!resultPagination.pageNumber}"
styleClass="current" />
</apex:outputPanel>
<apex:outputPanel >
<apex:outputText value="下一页"
rendered="{!!resultPagination.hasRecord || !resultPagination.hasNext}"
style="border: solid 1px #ddd;padding:1px 6px;background: #e8e8e9;margin-right:5px;margin-left:5px;"></apex:outputText>
<apex:commandLink action="{!nextPage}"
rendered="{!resultPagination.hasRecord && resultPagination.hasNext}"
immediate="true" reRender="companyList" value="下一页"
style="margin-right:5px;margin-left:5px;" />
</apex:outputPanel>
<apex:outputPanel >
<apex:outputText value="尾页"
rendered="{!!resultPagination.hasRecord || !resultPagination.hasNext}"
style="border: solid 1px #ddd;padding:1px 6px;background: #e8e8e9;margin-right:5px;"></apex:outputText>
<apex:commandLink action="{!lastPage}"
rendered="{!resultPagination.hasRecord && resultPagination.hasNext}"
immediate="true" reRender="companyList" value="尾页"
style="margin-right:5px;" />
</apex:outputPanel>
</apex:panelGroup>
</apex:panelGrid>
</apex:outputPanel>
</apex:outputPanel>
</apex:outputPanel>
</apex:outputPanel>
</apex:outputPanel>
</apex:form>
</apex:page>

CompanyListPage

其中,CompanyListPage中没有对页面进行样式调整,也没有做相关search,new,edit以及view的操作,感兴趣的小伙伴可以自行补充。

显示效果:

1.语言为英文(我的默认语言)情况下:

2.语言为中文情况下:

3.翻页效果:

4.尾页效果:

总结:此篇结合上篇实现了如果不用标准界面的分页自己创建分页的实例展示,其中有考虑不细致的地方,比如offset超过2000应该有一定提示等,也有没有做完的地方,比如模糊搜索和增删改功能。如果篇中有错误地方欢迎指正,如果有不懂的地方欢迎留言。(ps:效果显示请忽略UI)

salesforce 零基础学习(四十九)自定义列表分页之使用Pagination实现分页效果 ※※※的更多相关文章

  1. salesforce 零基础学习(十九)Permission sets 讲解及设置

    Permission sets以及Profile是常见的设置访问权限的方式. Profile规则为'who see what'.通过Profile可以将一类的用户设置相同的访问权限.对于有着相同Pro ...

  2. salesforce零基础学习(九十九)Git 在salesforce项目中的应用(vs code篇)

    本篇参考: https://code.visualstudio.com/docs/editor/versioncontrol https://git-scm.com/doc https://git-s ...

  3. salesforce零基础学习(九十九)Salesforce Data Skew(数据倾斜)

    本篇参考: https://developer.salesforce.com/blogs/engineering/2013/04/managing-lookup-skew-to-avoid-recor ...

  4. salesforce 零基础学习(十八)WorkFlow介绍及用法

    说起workflow大家肯定都不陌生,这里简单介绍一下salesforce中什么情况下使用workflow. 当你分配许多任务,定期发送电子邮件,记录修改时,可以通过自动配置workflow来完成以上 ...

  5. salesforce 零基础学习(十六)Validation Rules & Date/time

    上一篇介绍的内容为Formula,其中的Date/time部分未指出,此篇主要介绍Date/time部分以及Validation rules. 本篇参考PDF: Date/time:https://r ...

  6. salesforce零基础学习(八十二)审批邮件获取最终审批人和审批意见

    项目中,审批操作无处不在.配置审批流时,我们有时候会用到queue,related user设置当前步骤的审批人,审批人可以一个或者多个.当审批人有多个时,邮件中获取当前记录的审批人和审批意见就不能随 ...

  7. salesforce零基础学习(八十九)使用 input type=file 以及RemoteAction方式上传附件

    在classic环境中,salesforce提供了<apex:inputFile>标签用来实现附件的上传以及内容获取.salesforce 零基础学习(二十四)解析csv格式内容中有类似的 ...

  8. salesforce 零基础学习(五十二)Trigger使用篇(二)

    第十七篇的Trigger用法为通过Handler方式实现Trigger的封装,此种好处是一个Handler对应一个sObject,使本该在Trigger中写的代码分到Handler中,代码更加清晰. ...

  9. salesforce零基础学习(八十)使用autoComplete 输入内容自动联想结果以及去重实现

    项目中,我们有时候会需要实现自动联想功能,比如我们想输入用户或者联系人名称,去联想出系统中有的相关的用户和联系人,当点击以后获取相关的邮箱或者其他信息等等.这种情况下可以使用jquery ui中的au ...

  10. salesforce 零基础学习(六十八)http callout test class写法

    此篇可以参考: https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_classes_restfu ...

随机推荐

  1. 前端CSS规范整理_转载、、、

    一.文件规范 1.文件均归档至约定的目录中. 具体要求通过豆瓣的CSS规范进行讲解: 所有的CSS分为两大类:通用类和业务类.通用的CSS文件,放在如下目录中: 基本样式库 /css/core 通用U ...

  2. 利用Photoshop修改图片以达到投稿要求

    摘自:http://www.dxy.cn/bbs/thread/8602152#8602152 利用Photoshop修改图片以达到投稿要求 软件版本为Photoshop CS V8.0.1(中文版) ...

  3. 跨界玩AR,迪奥、Hugo Boss等知名奢侈品牌将制造AR眼镜

    Snapchat因为阅后即焚消息应用而被人所熟知,前段时间这家公司拓展主要业务,未来将不再只有消息应用,还有款名为"Spectacles"的AR太阳镜.内置了一个摄像头,戴上之后即 ...

  4. [ACM训练] 算法初级 之 基本算法 之 枚举(POJ 1753+2965)

    先列出题目: 1.POJ 1753 POJ 1753  Flip Game:http://poj.org/problem?id=1753 Sample Input bwwb bbwb bwwb bww ...

  5. Swift的关键字

    在声明中使用关键字 let   :声明一个常量 var :声明一个变量 class :声明一个类 static :静态的 deinit :反初始化方法?析构方法 init :构造方法?初始化方法 en ...

  6. [SE0]简单的搜索引擎原理

    1.简单了解搜索引擎收录的原理  包括baidu. google .yahoo 在内的各大搜索引擎在内基本上搜录网站的原理大致相同(除了国内某些网站 网1新 l 等采取人工登记的办法),搜索引擎都是采 ...

  7. Storm 中什么是-acker,acker工作流程介绍

    概述 我们知道storm一个很重要的特性是它能够保证你发出的每条消息都会被完整处理, 完整处理的意思是指: 一个tuple被完全处理的意思是: 这个tuple以及由这个tuple所导致的所有的tupl ...

  8. springmvc2 一个控制器写多个方法(非注解方式)

    出处:http://blog.csdn.net/xuewenke/article/details/23895999 springmvc2 一个控制器写多个方法(非注解方式) 分类: spring 20 ...

  9. 【OAuth2.0】Spring Security OAuth2.0篇之初识

    不吐不快 因为项目需求开始接触OAuth2.0授权协议.断断续续接触了有两周左右的时间.不得不吐槽的,依然是自己的学习习惯问题,总是着急想了解一切,习惯性地钻牛角尖去理解小的细节,而不是从宏观上去掌握 ...

  10. 【hihoCoder】1288 : Font Size

    题目:http://hihocoder.com/problemset/problem/1288 手机屏幕大小为 W(宽) * H(长),一篇文章有N段,每段有ai个字,要求使得该文章占用的页数不超过P ...