博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Hibernate+Freemarker分页控件实现
阅读量:2494 次
发布时间:2019-05-11

本文共 3791 字,大约阅读时间需要 12 分钟。

传到前端的Page

public class Page
implements Serializable { private static final long serialVersionUID = 1L; private List
contents; private int pageSize; private int totalSize; private int curPage; public Page(int curPage, int totalSize, int pageSize, List
contents) { this.curPage = curPage; this.totalSize = totalSize; this.pageSize = pageSize; this.contents = contents; } public List
getContents() { return contents; } public void setContents(List
contents) { this.contents = contents; } public int getTotalPages() { return totalSize / pageSize + 1; } public int getPageSize() { return pageSize; } public void setPageSize(int pageSize) { this.pageSize = pageSize; } public int getCurPage() { return curPage; } public void setCurPage(int curPage) { this.curPage = curPage; } public int getTotalSize() { return totalSize; } public void setTotalSize(int totalSize) { this.totalSize = totalSize; }}

后端实现

解析URL,得到第几页的数据,填充到model data中。

@Controllerpublic class ExampleController {    //例如http://localhost:8088/javaweb/example/page_3.html,    @RequestMapping(value = { "/example/page{pageNo}.html", "/example/page_{pageNo}.html" })    public String page(@PathVariable("pageNo") int pageNo, Map
map) { if (pageNo <= 0) pageNo = 1; FrontUtil.frontPageData(map, pageNo, "/javaweb/example/page_"); return "example/page"; }}

Freemarker自定义指令

public class ContentPageDirective implements TemplateDirectiveModel {
// private Version version = new Version("2.3.23"); private DefaultObjectWrapperBuilder defaultObjectWrapperBuilder = new DefaultObjectWrapperBuilder( new Version("2.3.23")); @Inject private ContentDao contentDao; @Override public void execute(Environment env, @SuppressWarnings("rawtypes") Map params, TemplateModel[] loopVars, TemplateDirectiveBody body) throws TemplateException, IOException { // TODO Auto-generated method stub try { int pageNo = FrontUtil.getPageNo(env); Page
page = contentDao.getPage(pageNo); env.setVariable("page", defaultObjectWrapperBuilder.build().wrap(page)); if (body != null) { body.render(env.getOut()); } } catch (ClientException e) { // TODO Auto-generated catch block e.printStackTrace(); } }}

前端实现

分页 <@cms_content_page>
    <#list page.contents as content>
  • ${content.title}
总共${page.totalSize}条记录 ${page.curPage}/${page.totalPages}页 <#assign href="/javaweb/example/page_"> 首页 <#if (page.curPage > 1) > 上一页 <#else> 上一页
<#if page.curPage < page.totalPages> 下一页 <#else> 下一页
尾页

Hibernate关键实现

public class PageableBaseDao
extends AbstractBaseDao
implements Pageable
{
@Override public Page
getPage(int curPage) throws ClientException { // TODO Auto-generated method stub if (curPage < 1) { throw new ClientException("page number should large than 0"); } int totalSize = getCount(); int pageSize = PageConstant.SIZE_PER_PAGE; Criteria criteria = getSession().createCriteria(entityClass); criteria.setFirstResult((curPage - 1) * pageSize); criteria.setMaxResults(pageSize); List contents = criteria.list(); return new Page
(curPage, totalSize, pageSize, contents); }}

截图

访问

这里写图片描述

你可能感兴趣的文章
CountDownLatch源码解析加流程图详解--AQS类注释翻译
查看>>
ES相关度评分
查看>>
我们一起做一个可以商用的springboot脚手架
查看>>
idea在搭建ssm框架时mybatis整合问题 无法找到mapper
查看>>
java设计基本原则----单一职责原则
查看>>
HashMap的实现
查看>>
互斥锁 synchronized分析
查看>>
java等待-通知机制 synchronized和waity()的使用实践
查看>>
win10 Docke安装mysql8.0
查看>>
docker 启动已经停止的容器
查看>>
order by 排序原理及性能优化
查看>>
Lock重入锁
查看>>
docker安装 rabbitMq
查看>>
git 常用命令 入门
查看>>
关闭selinx nginx无法使用代理
查看>>
shell 脚本部署项目
查看>>
spring cloud zuul网关上传大文件
查看>>
springboot+mybatis日志显示SQL
查看>>
工作流中文乱码问题解决
查看>>
maven打包本地依赖包
查看>>