Salesforce 开发整理(六) Visualforce分页
分页的实现总体上分真分页和假分页。
所谓真分页指页面上列出来的数据就是实际查询的数据,假分页则是无论页面上一次显示多少条记录,实际上后台已经加载了所有的记录,分页只是为了展示给用户查看。今天分享一个Visualforce页面的真分页的实现
Apex 类:OppPageController
/*******
*
* @作者:Ricardo
* @Time:2018-06-05
* @function:业务机会的分页列表展示
*
*/
public with sharing class OppPageController { //分页参数
public Integer counter=0; //偏移量
public static Integer LIST_SIZE = 10;//每页显示记录数
public Integer total_size; //总记录数 public OppPageController () {
total_size = [select count() from Opportunity];
} //变量 Opportunitys 的get方法
public List<Opportunity> getOpportunitys() {
try { List<Opportunity> Opportunitys= [select Id,Name,StageName,Account.Name,Type,Probability from Opportunity limit :LIST_SIZE offset :counter];// limit x,y return Opportunitys;
} catch (Exception e) {
ApexPages.addMessages(e);
return null;
}
} //变量 DisablePrevious 的get方法
//控制上一页按钮是否可点击
public Boolean getDisablePrevious() {
if (counter>0)
return false;
else
return true;
} //变量 DisableNext 的get方法
//控制下一页按钮是否可点击
public Boolean getDisableNext() {
if (counter + LIST_SIZE < total_size)
return false;
else
return true;
} //变量 Total_size 的get方法
//返回Total_size的值
public Integer getTotal_size() {
return total_size;
} //变量 PageNumber 的get方法
//计算当前页码
public Integer getPageNumber() {
return counter/LIST_SIZE + 1;
} //变量 TotalPages 的get方法
//计算总页数
public Integer getTotalPages() {
if (math.mod(total_size, LIST_SIZE ) > 0) {
return total_size/LIST_SIZE + 1;
} else {
return (total_size/LIST_SIZE ) ;
}
} //首页
public PageReference First() {
counter = 0;
return null;
} //上一页
public PageReference Previous() {
counter -= LIST_SIZE ;
return null;
} //下一页
public PageReference Next() {
counter += LIST_SIZE ;
return null;
} //尾页
public PageReference End() {
counter = total_size - math.mod(total_size, LIST_SIZE ) ;
return null;
}
}
Visualforce 页面
<apex:page controller="OppPageController" showHeader="false">
<style type="text/css">
/* 控制footer居右显示 */
.footer{
text-align: right;
}
</style>
<apex:sectionHeader subtitle="业务机会分页显示列表" title="业务机会"/>
<apex:form >
<apex:pageBlock >
<!-- 显示错误异常信息 -->
<apex:pageMessages id="message"/>
<apex:pageBlockButtons location="bottom" style="text-align: center;">
<!-- 按钮显示效果 -->
<apex:outputPanel id="buttons">
<apex:commandButton action="{!First}" title="First" value="首页" disabled="{!disablePrevious}" reRender="showpanel,buttons"/>
<apex:commandButton action="{!Previous}" title="Previous" value="上一页" disabled="{!disablePrevious}" reRender="showpanel,buttons"/>
<apex:commandButton action="{!Next}" title="Next" value="下一页" disabled="{!disableNext}" reRender="showpanel,buttons"/>
<apex:commandButton action="{!End}" title="End" value="尾页" disabled="{!disableNext}" reRender="showpanel,buttons"/>
</apex:outputPanel>
</apex:pageBlockButtons> <apex:outputPanel id="showpanel">
<apex:pageMessages id="theMessages" />
<apex:pageBlockTable value="{!Opportunitys}" var="opp" footerClass="footer">
<apex:column value="{!opp.Name}" />
<apex:column value="{!opp.StageName}" />
<apex:column value="{!opp.Account.Name}" />
<apex:column value="{!opp.Type}" />
<apex:column value="{!opp.Probability}" />
<apex:facet name="footer">第{!pageNumber}/{!totalPages}页 共计{!total_size}条</apex:facet>
</apex:pageBlockTable>
</apex:outputPanel>
</apex:pageBlock>
</apex:form>
</apex:page>
完成后的页面效果图

可以看到完成后的页面,是比较符合Salesforce原生态样式的
OppPageController中的代码结构比较简单,主要是根据偏移量,查询每次需要展示的记录数据,并刷新页面显示,以达到页面分页显示的效果,也就是说,这是一种真分页的实现。
本文仅供参考,如有错漏之处欢迎指正,如有疑问,欢迎评论区留言
Salesforce 开发整理(六) Visualforce分页的更多相关文章
- Salesforce 开发整理(八)PDF打印相关
一:基础设置 Salesforce中的PDF页面本质上还是Visualforce[简称VF]页面,所以只需要给VF页面加上一个属性[renderAs="pdf"] 即可生成一个PD ...
- Salesforce 开发整理(五)代码开发最佳实践
在Salesforce项目实施过程中,对项目代码的维护可以说占据极大的精力,无论是因为项目的迭代,还是需求的变更,甚至是项目组成员的变动,都不可避免的需要维护之前的老代码,而事实上,几乎没有任何一个项 ...
- Salesforce 开发整理(一)测试类最佳实践
在Sales force开发中完善测试类是开发者必经的一个环节,代码的部署需要保证至少75%的覆盖率,那么该如何写好测试类呢. 测试类定义格式如下: @isTest private class MyT ...
- Salesforce 开发整理(七)配置审批流
salesforce提供了比较强大的可配置审批流功能,在系统中翻译为“批准过程”.所以需要配置审批时,选择创建 ——> 工作流和批准 ——> 批准过程,然后选择管理批准过程,选择需要配置 ...
- Salesforce 开发整理(四)记录锁定
如果一个对象的记录在满足某个条件的情况下,希望能对其进行锁定,即普通用户没有权限对其进行编辑操作,记录页面显示如下图 一般会在提交审批,或者项目进行到某个阶段的情况下,由后台进行判断要不要锁定记录,或 ...
- Salesforce 开发整理(二)报表开发学习
Salesforce提供了强大的报表功能,支持表格.摘要.矩阵以及结合共四种形式,本文探讨在站在开发的角度要如何理解报表. 一:查询报表基本信息报表在Sales force中是Report对象,基本的 ...
- Salesforce 开发整理(十一) 自定义放大镜查找效果
有时候在自定义的visualforce页面上,需要实现系统标准的查找样式,当不能使用标准的style的时候,我们只能选择自定义实现,下面分享一个demo,预览效果如下: 实现代码,Visualforc ...
- Salesforce 开发整理(十)项目部署总结
项目部署顺序 全局值集 小组 自定义字段-对象-设置(SF1 紧凑布局要和记录类型在这里要一起部署) 邮件模板-静态资源 角色 工作流-流定义(包含进程生成器) 批准过程 开发部署<Apex类, ...
- Salesforce 开发整理(九) 开发中使用的一些小技巧汇总[持续更新]
1.查询一个对象下所有字段 当需要查询一个对象所有字段进行复制或其他操作,可以使用一段拼接的语句来查询 String query = 'select '; for(String fieldApi : ...
随机推荐
- Mysql load data infile 命令格式
[1]Linux系统环境下 LOAD DATA INFILE /usr/LOCAL/lib/ubcsrvd/datacsv/201909_source.csv INTO TABLE np_cdr_20 ...
- windows10下录屏
windows10自带了录屏功能.运行win+G即可打开.如果出现错误,可以运行如下PS脚本. https://files.cnblogs.com/files/mqingqing123/reinsta ...
- python 排序 桶排序
算法思想: 桶排序将数组分到有限数量的桶里.然后每个桶里再分别排序(使用任何算法) 当要倍排序的数组内的数值时均匀分配的时候,桶排序使用线性时间O(n) 步骤: 根据最大值.最小值.桶内数据范围设定一 ...
- Java内功心法,创建型设计模式包括哪些
1. 单例(Singleton) Intent 确保一个类只有一个实例,并提供该实例的全局访问点. Class Diagram 使用一个私有构造函数.一个私有静态变量以及一个公有静态函数来实现. 私有 ...
- 2019 淘友天下java面试笔试题 (含面试题解析)
本人5年开发经验.18年年底开始跑路找工作,在互联网寒冬下成功拿到阿里巴巴.今日头条.淘友天下等公司offer,岗位是Java后端开发,因为发展原因最终选择去了淘友天下,入职一年时间了,也成为了面 ...
- CSP复赛day2模拟题
没错,我又爆零了.....先让我自闭一分钟.....so 当你忘记努力的时候,现实会用一记响亮的耳光告诉你东西南北在哪. 好了,现在重归正题: 全国信息学奥林匹克联赛(NOIP2014) 复赛模拟题 ...
- 将MySQL升级到8.0.x后的遇到到错误及解决
一,安装的时遇到的坑 我下的是Mysql 8.0.13 地址:https://dev.mysql.com/downloads/mysql/ 下的是解压版(个人能不用安装就不想用安装版的强迫症(/▽\) ...
- OL8.0静默安装Oracle 19C
首先在edelivery中下载Oracle Linux 8.0 然后就默认安装系统 环境准备工具目前不支持OL8,所以需要手动安装,首先设置内核参数,在/etc/sysctl.conf追加 [root ...
- django_restframework项目之数据库搭建(二)
数据库配置 创建数据库 """ 1.管理员连接数据库 2.创建数据库 >: create database luffy default charset=utf8; ...
- elastic date时区问题解决办法
之前介绍filter date插件时就谈到时区问题,但是没有说明白.最近在使用range查询时间范围内的数据时出现了数据量不一致的情况.特地了解了下ELK Stack中关于时区的问题. 问题: 使用k ...