4

我正在用 play 2 和 java 编写小型网络应用程序。我有实体列表,现在我要将它们分成页面。我从 Twitter Bootstrap 获取分页组件,使我的数据库查询返回实体页面,以及.. 我应该使用哪种方式来构建页面导航器?

我的意思如下:例如,我总共有 20 页,要显示 12 页。我有 5 个位置来显示每页按钮。是否有一些库或片段可以生成如下内容:1 .. 11 12 13 .. 20。我知道这并不难,我已经在我以前的项目中实现了它......但是有一个 jar 可以解决这个问题我会很酷。有什么解决办法吗?

4

2 回答 2

4

我可以分享我所拥有的,我也在使用引导程序

package models.helper;

import java.util.ArrayList;
import java.util.List;

public class Pager<T> {

    public List<T> entities;

    public int page;

    public int pages;

    public String urlTemplate;

    public int resultsPerPage;

    public List<Integer> getPageList(){
        List<Integer> pageList = new ArrayList<Integer>(pages);
        for(int i = 1; i<=pages;i++){
            pageList.add(i);
        }
        return pageList;
    }

    public int getPrevious(){
        return page -1;
    }

    public int getNext(){
        return page +1;
    }

    public boolean isCurrent(Integer page){
        return this.page == page - 1;
    }

    public boolean isLast(){
        return page == pages -1;
    }

    public boolean isFirst(){
        return page == 0;
    }

    public String getUrl(Integer page){
        return urlTemplate
                .replace("-1", Integer.toString(resultsPerPage))
                .replace("-2", Integer.toString(page-1));
    }

    public String getNextUrl(){
        if(isLast()){
            return "#";
        }
        return urlTemplate
                .replace("-1", Integer.toString(resultsPerPage))
                .replace("-2", Integer.toString(getNext()));
    }

    public String getPreviousUrl(){
        if(isFirst()){
            return "#";
        }
        return urlTemplate
                .replace("-1", Integer.toString(resultsPerPage))
                .replace("-2", Integer.toString(getPrevious()));
    }
}

我的服务返回这些对象之一,在我的模板中我有一个寻呼机标签

@(pager:models.helper.Pager[_])
<div class="pagination">
  <ul>
    <li class="prev@if(pager.isFirst){ disabled}">
        <a href="@pager.getPreviousUrl">&larr; Previous</a>
    </li>
    @for(page <- pager.getPageList){
    <li @if(pager.isCurrent(page)){class="active"}>
        <a href="@pager.getUrl(page)">@page</a>
    </li>
    }
    <li class="next@if(pager.isLast){ disabled}">
      <a href="@pager.getNextUrl">Next &rarr;</a>
    </li>
  </ul>
</div>

模板网址将像这样构建(scala)第一个参数是“resultsPerPage”,第二个参数是实际的“页面”

pager.urlTemplate = routes.Application.myAction(-1, -2).url

-1 和 -2 参数有点难看,但直到现在我还没有找到更好的解决方案

于 2012-06-05T14:15:36.273 回答
3

据我所知,模板中不支持分页,但幸运的是Ebean支持它,所以你只需要在模板中做一些工作。

检查计算机数据库示例应用程序,那里实现了计算机列表的分页(它也使用 Twitter Bootstrap,所以你只需要复制和粘贴代码)

当然,您也可以在下载到计算机的 Play 版本中找到示例应用程序。

于 2012-06-04T10:45:03.320 回答