上篇内容为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)

最新文章

  1. [Animatable Properties](https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/CoreAnimation_guide/AnimatableProperties/AnimatableProperties.html)
  2. Android 手机卫士--md5加密过程
  3. nginx入门
  4. CRLF和LF
  5. 统计第一个空字符前面的字符长度(java实现)
  6. AIR ANE(本机扩展)使用中的一些问题(Android平台)
  7. 浅析 Cordova for iOS
  8. gerrit集成gitweb:Error injecting constructor, java.io.IOException: Permission denied
  9. POJ1061 青蛙的约会-拓展欧几里得
  10. [Bootstrap] 8. &#39;Collapse&#39;, data-target, data-toggle &amp; data-parent
  11. Java基础知识强化之集合框架笔记54:Map集合之HashMap集合(HashMap&lt;String,String&gt;)的案例
  12. Python处理XML
  13. servlet入门学习之工作原理解析
  14. 新概念英语(1-69)The car race
  15. java的main函数组成
  16. nodeJs --- web服务器创建
  17. Stanford Word Segmenter的特定领域训练
  18. Microsoft Visual Studio 2010(vs10)安装与使用
  19. spring colud 博客
  20. 7. mybatis实战教程(mybatis in action)之八:mybatis 动态sql语句

热门文章

  1. OpenCV2.4.13+VS2013开发环境配置
  2. nodejs复习05
  3. AJAX 缓存
  4. three.js立方体
  5. 【BZOJ3172】[Tjoi2013]单词 AC自动机
  6. bzoj 4327: JSOI2012 玄武密码
  7. js数组与对象性能比较
  8. 弱省互测#0 t2
  9. iOS特性一 关闭系统日志打印
  10. 华清远见成为ARM大学计划正式合作伙伴