后台框架: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后台分页实例一的更多相关文章

  1. JAVA RMI 实例

    下面我将介绍一个完整的实例,让初学者能快速体验RMI的功用. 分为以下四个步骤 1. 创建远程接口及声明远程方法(HelloInterface.java)2. 实现远程接口及远程方法(继承Unicas ...

  2. Java多线程-实例解析

    Java多线程实例 3种实现方法Java中的多线程有三种实现方式:1.继承Thread类,重写run方法.Thread本质上也是一个实现了Runnable的实例,他代表一个线程的实例,并且启动线程的唯 ...

  3. Thrift入门初探--thrift安装及java入门实例

    什么是thrift? 简单来说,是Facebook公布的一款开源跨语言的RPC框架. 那么问题来了. 什么是RPC框架? RPC全称为Remote Procedure Call,意为远程过程调用. 假 ...

  4. [Java初探实例篇02]__流程控制语句知识相关的实例练习

    本例就流程控制语句的应用方面,通过三个练习题来深入学习和巩固下学习的流程控制语句方面的知识,设计到,if条件判断语句,switch多分支语句,for循环语句及其嵌套多层使用,while循环语句. 练习 ...

  5. 【thrift】thrift入门初探--thrift安装及java入门实例

    转载:https://www.cnblogs.com/fingerboy/p/6424248.html 公司的一些平台服务框架底层封装了thrift提供服务,最近项目不是很紧,于是研究了一下,刚刚入门 ...

  6. Redis缓存Mysql模拟用户登录Java实现实例[www]

    Redis缓存Mysql模拟用户登录Java实现实例 https://jingyan.baidu.com/article/09ea3ede1dd0f0c0aede3938.html redis+mys ...

  7. Flex Socket与Java通信实例说明(转)

    Flex Socket与Java通信实例说明(转) 这两天一直在flex的Socket ,现在终于懂了很多.由浅到深一步一步深入.慢慢体会实例,虽然实例都是在网上找的,但也经过了我的测试.我比较喜欢注 ...

  8. Java 正则表达式实例操作

    Regular Expression正则表达式,简称RegExp,常规通用的表达式,在多个开发语言中都有它的实现,可以通过正则表达式来快速的检索.匹配.查找.替换字符串中的文本. 简单实例 匹配网址 ...

  9. 从Java String实例来理解ANSI、Unicode、BMP、UTF等编码概念

    转(http://www.codeceo.com/article/java-string-ansi-unicode-bmp-utf.html#0-tsina-1-10971-397232819ff9a ...

随机推荐

  1. Ext树形结构

    <html> <head> <meta http-equiv="Content-Type" content="text/html; char ...

  2. Linux进程间通信—消息队列

    四.消息队列(Message Queue) 消息队列就是消息的一个链表,它允许一个或者多个进程向它写消息,一个或多个进程向它读消息.Linux维护了一个消息队列向量表:msgque,来表示系统中所有的 ...

  3. OpenMP 线程互斥锁

    OpenMP是跨平台的多核多线程编程的一套指导性的编译处理方案(Compiler Directive),指导编译器将代码编译为多线程程序. 多线程编程中肯定会涉及到线程之间的资源共享问题,就可以使用互 ...

  4. linux shell scripts:Syntax error: Bad for loop variable

    执行脚本报错 #!/bin/bash s=0 for (( i=1; i<=100; i++ )) do s=$(( $s + $i )) done echo $s sh add.sh 报错: ...

  5. FrameWork数据权限浅析1之基于手工修改模型实现行级数据安全

    1:环境 Cognos10.2.0,Oracle 2:实现过程 在设置Framework数据级别权限的时候,通常用到的就是在FM的设置数据安全的地方添加安全过滤器,如下图 step1:选中部门维度表→ ...

  6. (转)AS3-元数据Embed嵌入说明

    转自:http://www.shareme.cn/blog/article.asp?id=498 /*     * 没有设置,Flash会在源属性中根据导入资源文件的扩展名载入合适的类型     *  ...

  7. Python+Django+SAE系列教程13-----MySQL记录的添\删\改

    建立了数据库后,我们就来做一个简单的表(person_classroom)的加入.删除.改动的操作. 首先我们建立一个加入的页面的模板Classroom_Add.html(加入的表单)并把它放在Bid ...

  8. 【pyhon】怨灵侍全本漫画批量下载爬虫1.00

    代码: # 怨灵侍全本漫画批量下载爬虫1.00 # 拜CARTOON.fydupiwu.com整理有序所赐,寻找图片只要观察出规律即可,不用费劲下一页的找了 import time import ur ...

  9. IOS-UITableView入门(3)

    UITableView本身自带了(增.删)编辑功能: 1.仅仅要调用UITableView的编辑代码 就会进入编辑状态: [self.tableView setEditing:!self.tableV ...

  10. angular中$location读取url信息

    读取url信息: <html ng-app="myApp"> <head> <title>angularjs-demo</title> ...