4

Play 2 と Java を使用して小さな Web アプリを作成しています。エンティティのリストがあり、それらをページに分割します。Twitter Bootstrap からページネーションのコンポーネントを取得し、データベース クエリを作成してエンティティのページを返します。ページ ナビゲーターを作成するにはどの方法を使用すればよいですか?

私は次のことを意味します: たとえば、合計 20 ページがあり、12 番目を表示するつもりです。ページごとのボタンを表示する位置が 5 つあります。1 .. 11 12 13 .. 20 のようなものを生成するためのライブラリまたはスニペットはありますか。これはそれほど難しくないことはわかっており、以前のプロジェクトで実装しましたが、この問題を解決する jar が 1 つあります。私はかっこいいでしょう。いくつかの解決策はありますか?

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()));
    }
}

私のサービスはこれらのオブジェクトの 1 つを返し、私のテンプレートにはページャー タグがあります

@(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>

テンプレートの URL は次のように作成されます (scala) 最初のパラメーターは "resultsPerPage" で、2 番目のパラメーターは実際の "page" です

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

-1 と -2 のパラメーターは少し見にくいですが、今までより良い解決策を見つけられませんでした

于 2012-06-05T14:15:36.273 に答える
3

私の知る限り、テンプレートでのページングは​​サポートされていませんが、幸いなことEbeanにサポートされているため、テンプレートで少し作業を行うだけで済みます。

Computer database sample applicationを確認してください。ここでは、コンピューターのリストに対してページングが実装されています (これは Twitter Bootstrap も使用するため、コードをコピーして貼り付けるだけです)。

もちろん、PC にダウンロードした Play バージョンにもサンプル アプリケーションがあります。

于 2012-06-04T10:45:03.320 に答える