Hibernate+Freemarker分页控件实现
来源:互联网 发布:cdn加速域名 编辑:程序博客网 时间:2024/06/05 05:15
传到前端的Page
public class Page<T> implements Serializable { private static final long serialVersionUID = 1L; private List<T> contents; private int pageSize; private int totalSize; private int curPage; public Page(int curPage, int totalSize, int pageSize, List<T> contents) { this.curPage = curPage; this.totalSize = totalSize; this.pageSize = pageSize; this.contents = contents; } public List<T> getContents() { return contents; } public void setContents(List<T> 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<String, Object> 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<Content> 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(); } }}
前端实现
<!DOCTYPE html><html><head><meta charset="UTF-8"><title>分页</title></head><body> <@cms_content_page> <ul><#list page.contents as content> <li>${content.title}</li> </#list> </ul> 总共${page.totalSize}条记录 ${page.curPage}/${page.totalPages}页 <#assign href="/javaweb/example/page_"> <a href="${href + "1" + ".html"}">首页</a> <#if (page.curPage > 1) > <a href="${href + (page.curPage - 1) + ".html"}">上一页</a> <#else> <a href="${href + page.curPage + ".html"}">上一页</a> </#if> <#if page.curPage < page.totalPages> <a href="${href + (page.curPage + 1) + ".html"}">下一页</a> <#else> <a href="${href + page.curPage + ".html"}">下一页</a> </#if> <a href="${href + page.totalPages + ".html"}">尾页</a> </@cms_content_page></body></html>
Hibernate关键实现
public class PageableBaseDao<T> extends AbstractBaseDao<T> implements Pageable<T> { @Override public Page<T> 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<T>(curPage, totalSize, pageSize, contents); }}
截图
访问http://localhost:8088/javaweb/example/page_3.html
1 0
- Hibernate+Freemarker分页控件实现
- SpringMVC+Hibernate+Spring框架之一(Hibernate 分页实现,视图采用Freemarker)
- 数据分页标签控件Freemarker宏代码
- jquery ajax freemarker标签实现异步分页
- 实现FreeMarker+Ajax的无刷新分页
- 分页查询简单实现(Freemarker+SpringMVC+Mybatis)
- 【Hibernate】Hibernate真分页实现
- Hibernate实现分页
- Struts + Hibernate 实现 分页
- Hibernate 实现分页查询
- Hibernate实现分页查询
- Struts+Hibernate 分页实现
- Spring&Hibernate分页实现
- Spring Hibernate分页实现
- Hibernate 实现分页查询
- hibernate 实现分页
- struts+hibernate分页实现
- Hibernate 实现分页查询
- Android 自定义水波,touch和move状态下触发 (玩具)
- 常见单例设计模式的对比分析
- Otter(二)---了解zookeeper
- OMPL138及U-Boot的启动过程分析(三)
- 将Java Project (非web项目)打成Jar包并实现相关功能
- Hibernate+Freemarker分页控件实现
- Extjs中ajax请求当session失效时自动跳转
- TCP 的那些事儿(上)
- Dell PowerEdge R710在Red Hat 6.2安装OpenManage Server Administrator
- MySQL Connector/C++ 开发者指南简要阅读
- 趣味智力十一题
- HTML5实战应用:如何让表单验证更友好
- 习题2-6 排列(permutation)
- CCF-CSP-2015年9月-题解