Hibernate+Freemarker分页控件实现

传到前端的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中。

@Controller
public 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

这里写图片描述

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值