java后台分页实例一
后台框架:jfinal + velocity、前台框架:jquery
页面
<!DOCTYPE html>
<html> <head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<link rel="stylesheet" type="text/css" href="./student.css"/>
<script type="text/javascript" src="./jquery.min.js"></script>
<script type="text/javascript" src="./common.js"></script>
<style >
.pager a{display:inline-block;background: red;color:#ffffff;padding: 10px;text-decoration: none;}
</style>
</head> <body>
<table cellpadding="0" cellspacing="0">
<tr>
<th>序号</th>
<th>姓名</th>
<th>性别</th>
</tr>
#foreach($!stu in $!pager.list)
<tr>
<td>
$velocityCount
</td>
<td>
$!stu.name
</td>
<td>
$!stu.sex
</td>
</tr>
#end
</table>
</div> <div class ="pager">
<a href="javascript:void(0);" onclick="firstPage();" >首页</a>
<a href="javascript:void(0);" onclick="previousPage();" >上一页</a>
<a href="javascript:void(0);" onclick="nextPage();" >下一页</a>
<a href="javascript:void(0);" onclick="lastPage();" >尾页</a>
</div> <div class="pager-info">
当前页数:<span>$!pager.currentPage</span>
总记录数:<span>$!pager.totalRecord</span>
总记页数:<span>$!pager.totalPage</span>
</div> <script type="text/javascript"> var currentPage = "$!pager.currentPage";
if(!currentPage){
currentPage = 1;
}
var totalPage = "$!pager.totalPage"; //首页
function firstPage(){
if(currentPage == 1){
alert("已经是第一页数据");
return
}else{
common.requestForm({
url:"/oaweb/datatask/paginate",
data:{pageSize:5,pageNo:1}
});
}
} //上一页
function previousPage(){
if(currentPage == 1){
alert("已经是第一页数据");
return
}else{
common.requestForm({
url:"/oaweb/datatask/paginate",
data:{pageSize:5,pageNo:parseInt(currentPage)-1}
});
}
} //下一页
function nextPage(){
if(currentPage == totalPage){
alert("已经是最后一页数据");
return
}else{
common.requestForm({
url:"/oaweb/datatask/paginate",
data:{pageSize:5,pageNo:parseInt(currentPage)+1}
});
}
} //尾页
function lastPage(){
if(currentPage == totalPage){
alert("已经是最后一页数据");
return
}else{
common.requestForm({
url:"/oaweb/datatask/paginate",
data:{pageSize:5,pageNo:totalPage}
});
}
} </script>
</body>
</html>
js封装请求方法(common.js)
function Common(){
} Common.prototype = {
requestForm:function(option) {
var _option = {
url : "",
data : {}
};
$.extend(_option, option);
var form = $("<form>").attr("action",_option.url).attr("method","POST").appendTo($("body"));
$.each(_option.data,function(k,v){
$("<input>").attr("type","hidden").attr("name",k).attr("value",v).appendTo(form)
});
form.submit();
}
}
Controller
public class StudentController extends Controller{ public void paginate(){
Integer pageNo = getParaToInt("pageNo");
pageNo = pageNo==null?1:pageNo;
Integer pageSize =getParaToInt("pageSize");
pageSize = pageSize==null?5:pageSize;
Record record = new Record();
Pager<Record> pager = StudentService.myPaginate(record,pageNo,pageSize);
setAttr("page", pager);
render("/school/html/student/student_index.htm");
} }
Service
public class StudentService{ public static Pager<Record> myPaginate(Record record,int pageNo,int pageSize){
List<Record> list = getDataList();
Pager<Record> pager = new Pager<Record>(pageNo,pageSize,list);
return pager;
} }
Pager类封装分页信息
import java.util.List; public class Pager<T> { private Integer pageSize; private Integer totalRecord; private Integer totalPage; private Integer currentPage; private List<T> list; public Integer getPageSize() {
return pageSize;
} public void setPageSize(Integer pageSize) {
this.pageSize = pageSize;
} public Integer getTotalRecord() {
return totalRecord;
} public void setTotalRecord(Integer totalRecord) {
this.totalRecord = totalRecord;
} public Integer getTotalPage() {
return totalPage;
} public void setTotalPage(Integer totalPage) {
this.totalPage = totalPage;
} public Integer getCurrentPage() {
return currentPage;
} public void setCurrentPage(Integer currentPage) {
this.currentPage = currentPage;
} public List<T> getList() {
return list;
} public void setList(List<T> list) {
this.list = list;
} public Pager(Integer pageNo,Integer pageSize,List<T> sourceList){
if(sourceList==null){
return;
} //总记录数
this.totalRecord = sourceList.size(); //每页显示多小条数据
this.pageSize = pageSize; //总页数
this.totalPage = this.totalRecord % this.pageSize == 0?this.totalRecord/this.pageSize:this.totalRecord/this.pageSize+1; //当前第几页
if(this.totalPage < pageNo){
this.currentPage = this.totalPage;
}else{
this.currentPage = pageNo;
} //起始索引
Integer fromIndex = this.pageSize * (this.currentPage - 1); //结束索引
Integer endIndex = null;
if(this.pageSize * this.currentPage >this.totalRecord){
endIndex = this.totalRecord;
}else{
endIndex = this.pageSize * this.currentPage;
} this.list = sourceList.subList(fromIndex, endIndex);
} }
总结:
此实例用subList功能分页,后续会用数据库SQL来完成分页。
java后台分页实例一的更多相关文章
- JAVA RMI 实例
下面我将介绍一个完整的实例,让初学者能快速体验RMI的功用. 分为以下四个步骤 1. 创建远程接口及声明远程方法(HelloInterface.java)2. 实现远程接口及远程方法(继承Unicas ...
- Java多线程-实例解析
Java多线程实例 3种实现方法Java中的多线程有三种实现方式:1.继承Thread类,重写run方法.Thread本质上也是一个实现了Runnable的实例,他代表一个线程的实例,并且启动线程的唯 ...
- Thrift入门初探--thrift安装及java入门实例
什么是thrift? 简单来说,是Facebook公布的一款开源跨语言的RPC框架. 那么问题来了. 什么是RPC框架? RPC全称为Remote Procedure Call,意为远程过程调用. 假 ...
- [Java初探实例篇02]__流程控制语句知识相关的实例练习
本例就流程控制语句的应用方面,通过三个练习题来深入学习和巩固下学习的流程控制语句方面的知识,设计到,if条件判断语句,switch多分支语句,for循环语句及其嵌套多层使用,while循环语句. 练习 ...
- 【thrift】thrift入门初探--thrift安装及java入门实例
转载:https://www.cnblogs.com/fingerboy/p/6424248.html 公司的一些平台服务框架底层封装了thrift提供服务,最近项目不是很紧,于是研究了一下,刚刚入门 ...
- Redis缓存Mysql模拟用户登录Java实现实例[www]
Redis缓存Mysql模拟用户登录Java实现实例 https://jingyan.baidu.com/article/09ea3ede1dd0f0c0aede3938.html redis+mys ...
- Flex Socket与Java通信实例说明(转)
Flex Socket与Java通信实例说明(转) 这两天一直在flex的Socket ,现在终于懂了很多.由浅到深一步一步深入.慢慢体会实例,虽然实例都是在网上找的,但也经过了我的测试.我比较喜欢注 ...
- Java 正则表达式实例操作
Regular Expression正则表达式,简称RegExp,常规通用的表达式,在多个开发语言中都有它的实现,可以通过正则表达式来快速的检索.匹配.查找.替换字符串中的文本. 简单实例 匹配网址 ...
- 从Java String实例来理解ANSI、Unicode、BMP、UTF等编码概念
转(http://www.codeceo.com/article/java-string-ansi-unicode-bmp-utf.html#0-tsina-1-10971-397232819ff9a ...
随机推荐
- 【mysql】二级索引----聚簇索引和非聚簇索引-----
参考地址: https://blog.csdn.net/bigtree_3721/article/details/51335479 https://blog.csdn.net/roxliu/artic ...
- 第十一章 PhpMyAdmin连接远程mysql服务器---连接openwrt 703N服务器
//千万不要在你原来的那个phpmyadmin文件夹上操作~~~要复制一个新的进行操作,这样我们就可以同时使用本地和远程 一.下载phpmyadmin到本地 我使用的是windows下的集成WAM ...
- #include <NOIP2008 Junior> 双栈排序 ——using namespace wxl;
题目描述 Tom最近在研究一个有趣的排序问题.如图所示,通过2个栈S1和S2,Tom希望借助以下4种操作实现将输入序列升序排序. 操作a 如果输入序列不为空,将第一个元素压入栈S1 操作b 如果栈S1 ...
- RMAN备份与恢复总汇
1.1 备份 1.1.1 对数据库进行全备 使用backup database命令执行备份 RMAN> BACKUP DATABASE; 执行上述命令后将对目标数据库中的所有数据文件进行备份, ...
- go语言基础之类型转换
1.类型转换 示例: package main //必须有一个main包 import "fmt" func main() { //这种不能转换的类型,叫不兼容类型 var fla ...
- Fragment 简介 基础知识 总结 MD
Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...
- 一招搞定多Offer选择
12月9号在论坛看到一位毕业生问了一个问题: 如今两个offer 一个在南京,搞.net ,公司是国电南自.税前一年加起来几乎相同7.2万.一个是在上海.搞java,公司名叫鑫合汇(不知道各位有没实用 ...
- 利用shell监控cpu、磁盘、内存使用率
利用shell监控cpu.磁盘.内存使用率,达到警报阈值发邮件进行通知 并配合任务计划,即可及时获取报警信息 #!/bin/bash ################################# ...
- [Grunt] Cleaning your build folder with grunt-contrib-clean
Grunt will clean up your build with the grunt-contrib-clean to make sure that no artifacts from prev ...
- .NET破解之爱奇迪(二)
爱奇迪的其他系统软件我不感兴趣,但这个Database2Sharp看起来好像很有用的. 官网介绍: 一个简单点击几次鼠标就能完成一周代码量的代码生成工具,效率惊人.友好体贴,真正的开发好伴侣,提供了对 ...