UPDATE:重新优化了一下代码,减少一次页面请求读取数据库的次数,由原来的一次请求6次读取,减少为一次请求3次读取:
- 去掉UserPager.java中current变量,并去除相应的getter和setter;
- 去掉UserPager.java中的getPrevious()方法,并修正isPrevExists(),此处修改减少数据库读取2次;
- Home.html中,删@Pager中的current=pagedUsers,与UserPager.java的修改相适应,并减少一次数据库读取。
UPDATE2: 修改UserPager.html模板,再次减少读取数据库一次,最后结果是一次请求读取数据库2次。
一个简单的、可用的分页widget,主要功能是通过点击“上一页”和“下一页”,从数据库中取得User Entity的分页数据。水平非常有限,错漏之处难免,请各位高手指点。
1、分页widget @Pager
UserPager.java
public class UserPager {
private int page;
private int maxPerPage;
@Inject
private UserFinder finder;
public ArrayList<User> getNext(){
int start = page * maxPerPage;
return finder.listUsers(start, maxPerPage);
}
public int getPage() {
return page;
}
public void setPage(int page) {
this.page = page;
}
public boolean isNextExists(){
return !getNext().isEmpty();
}
public boolean isPrevExists(){
if(page<2)
return false;
return true;
}
public void setMaxPerPage(int maxPerPage) {
this.maxPerPage = maxPerPage;
}
public int getMaxPerPage(){
return maxPerPage;
}
}
2、 分页模板
UserPager.html
<!DOCTYPE HTML>
<html>
<head>
<title>none</title>
</head>
<body>
<p>
@ShowIf(prevExists)
<span><< <a href="/?page=${page-1}">上一页</a></span>
<span> </span>
@ShowIf(nextExists)
<span><a href="/?page=${page+1}">下一页</a> >></span>
</p>
</body>
</html>
3、sitebricks的配置,在protected void configureSitebricks()方法中增加一行:
embed(UserPager.class).as("Pager");
4、应用:
Home.java
public class Home extends Decorator {
private ArrayList<User> pagedUsers;
private int page;
private int maxPerPage = 2;//设置每页最大显示结果数
public int getPage() {
return page;
}
public void setPage(int page) {
this.page = page;
}
@Inject
private UserFinder finder;
public Home() {
}
public ArrayList<User> getPagedUsers() {
if(page<1)
page = 1;
int start = (page - 1) * maxPerPage;
return finder.listUsers(start, maxPerPage);
}
@Override
public String getPageTitle() {
return "主页再次测试!";
}
public int getMaxPerPage() {
return maxPerPage;
}
public void setMaxPerPage(int maxPerPage) {
this.maxPerPage = maxPerPage;
}
}
Home.html
<!DOCTYPE HTML>
<html>
<head>
<title>bricks - Home page</title>
<meta charset="UTF-8"/>
</head>
<body>
<div>
<ol>
@Repeat(items=pagedUsers, var="user")
<li>${user.name}</li>
</ol>
@Pager(page=page, maxPerPage=maxPerPage)
<div/>
</div>
</body>
</html>
5、还需要解决的问题:分页数据局限于User,widget @Pager不能用于其它数据分页。解决的思路:像tapestry的GridPager一样,设置pagedSource,但问题是pagedSource必须是一次取全部数据记录。
分享到:
相关推荐
Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习笔记Java学习...
Java相关课程系列笔记之一Java学习笔记 Java相关课程系列笔记之四JDBC学习笔记 Java相关课程系列笔记之六HTML学习笔记 Java相关课程系列笔记之七CSS学习笔记 Java相关课程系列笔记之八JavaScript学习笔记 Java相关...
希沃白板学习笔记.pdf希沃白板学习笔记.pdf希沃白板学习笔记.pdf希沃白板学习笔记.pdf希沃白板学习笔记.pdf希沃白板学习笔记.pdf希沃白板学习笔记.pdf希沃白板学习笔记.pdf希沃白板学习笔记.pdf
Springcloud学习笔记.md,Springcloud学习笔记.md,Springcloud学习笔记.md,Springcloud学习笔记.md,Springcloud学习笔记.md,Springcloud学习笔记.md,Springcloud学习笔记.md,Springcloud学习笔记.md,Spring...
人工智能学习笔记,人工智能学习笔记,人工智能学习笔记人工智能学习笔记,人工智能学习笔记,人工智能学习笔记人工智能学习笔记,人工智能学习笔记,人工智能学习笔记人工智能学习笔记,人工智能学习笔记,人工智能...
CCNA学习笔记 CCNA学习笔记 CCNA学习笔记
本笔记共五部分 ObjectDCL学习笔记(1) PLmap@163.com 初识 ObjectDCL 1.安装和设置 ObjectDCL 2.启动和认识 ObjectDCL 3.创建一个最简单的对话框 4.完善控制对话框的 Lisp程序 5.运行 MyHello ObjectDCL学习...
云的学习笔记-云的学习笔记系统-云的学习笔记系统源码-云的学习笔记管理系统-云的学习笔记管理系统java代码-云的学习笔记系统设计与实现-基于ssm的云的学习笔记系统-基于Web的云的学习笔记系统设计与实现-云的学习...
云的学习笔记-云的学习笔记系统-云的学习笔记系统源码-云的学习笔记管理系统-云的学习笔记管理系统java代码-云的学习笔记系统设计与实现-基于ssm的云的学习笔记系统-基于Web的云的学习笔记系统设计与实现-云的学习...
### QT学习笔记Widget详解 #### 一、QT基础概念与组件使用 在开始探讨QT中的Widget之前,我们先简要回顾一下QT的基础概念。 - **QT框架简介**:QT是一个跨平台的应用开发框架,支持Windows、Linux、Mac OS等多种...
nginx学习笔记(软件+学习笔记) 仅供学习交流! 后续会持续分享相关资源,记得关注哦! nginx学习笔记(软件+学习笔记) 仅供学习交流! 后续会持续分享相关资源,记得关注哦! nginx学习笔记(软件+学习笔记) ...
2022吴恩达机器学习笔记汇总(共10章节).zip2022吴恩达机器学习笔记汇总(共10章节).zip2022吴恩达机器学习笔记汇总(共10章节).zip2022吴恩达机器学习笔记汇总(共10章节).zip2022吴恩达机器学习笔记汇总(共10章节).zip...
二、 redis学习笔记之数据类型 3 三、 redis学习笔记之排序 11 四、 redis学习笔记之事务 16 五、 redis学习笔记之pipeline 20 六、 redis学习笔记之发布订阅 23 七、 redis学习笔记之持久化 28 八、 redis学习笔记...
docker学习笔记,docker学习笔记,docker学习笔记,docker学习笔记,docker学习笔记,docker学习笔记,docker学习笔记,docker学习笔记,docker学习笔记,docker学习笔记,docker学习笔记,docker学习笔记,docker学习笔记,...