web-dev-qa-db-ja.com

Spring MVC 3でページネーションを実装する方法

Spring MVCのページネーションに使用できる、すぐに使用できる、実装が簡単な標準のページネーションコンポーネント/タグライブラリまたはコードサンプルはありますか?

56
Nachiket

PagedListHolder および org.springframework.beans.support

いくつかの例については、サンプルのJPetstoreをご覧ください。 in SearchProductsController.Java

public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
    String keyword = request.getParameter("keyword");
    if (keyword != null) {
        if (!StringUtils.hasLength(keyword)) {
            return new ModelAndView("Error", "message", "Please enter a keyword to search for, then press the search button.");
        }
        PagedListHolder productList = new PagedListHolder(this.petStore.searchProductList(keyword.toLowerCase()));
        productList.setPageSize(4);
        request.getSession().setAttribute("SearchProductsController_productList", productList);
        return new ModelAndView("SearchProducts", "productList", productList);
    }
    else {
        String page = request.getParameter("page");
        PagedListHolder productList = (PagedListHolder) request.getSession().getAttribute("SearchProductsController_productList");
        if (productList == null) {
            return new ModelAndView("Error", "message", "Your session has timed out. Please start over again.");
        }
        if ("next".equals(page)) {
            productList.nextPage();
        }
        else if ("previous".equals(page)) {
            productList.previousPage();
        }
        return new ModelAndView("SearchProducts", "productList", productList);
    }
}
87
Pascal Thivent

私もそれを行う方法を探していましたが、標準のコンポーネントやtaglibが見つかりませんでした。データベースからページングを使用してデータを取得する必要があるため、ページングが非常に具体的になる可能性があるためだと思います(Hibernateを使用している場合は、Criteria APIを使用して簡単に実行できます)。私はこのようなものを思いつきました:

public class Pager
{
    private int page;
    private int results;
    private String sortOrder;
    private String sortColumn;

    // Getters and setters
}

@Controller
public class StuffController
{
    @Autowired SomeEntityService someEntityService;

    @RequestMapping("/test.html", method = Method.GET)
    public void getStuffPaged(@RequestParam("id") String id, Pager pager, ModelMap mm)
    {
        mm.addAttribute("entities", someEntityService.get(id, pager));
    }
}

http://domain/app/test.html?id=10&page=1&results=30&sortOrder=ascへのリクエストを実行すると、リクエストでページャーオブジェクトが取得されます。

11
Daff

誰も思い浮かばず、 Google もそのための特定のコンポーネントを明らかにしません(ただし、かなり具体的な例とヒントを提供します)。しかし、理論的には、ボタンの束と1つ(または2つ)の要求パラメーターで十分です。次に、SQL/DBに処理を行わせます。 here の前に、JSP/Servlet/DAOコンテキストで同様の質問に対する回答を投稿しました。

基本的には、firstrow(ページに表示される最初の行のインデックス)をリクエストパラメーターとして渡し、firstrowをイン/デクリメントするページネーションフォームに2つのボタン/リンクを配置します。 rowcount(ページに一度に表示される行の量)と、各LIMIT句、OFFSET句の助けを借りて結果のサブセットを返すSQLクエリと組み合わせて、問題のDBに応じて、サブセレクト、または特定の機能。詳細なコード例とSQLクエリについては、前述の回答を参照してください。

4
BalusC

Spring Data JPAプロジェクトについて聞いたことがありますか? Pagableインターフェースを使用した柔軟なソリューションがあります。クリーンで定型のないページネーションを実現する最も簡単な方法であることがわかりました。 Spring Data JPAホームページ で詳細を確認してください。

4

Spring Data JPAリファレンスドキュメントへのリンク 、Webページネーションに対する非常にクリーンなアプローチがあります。

3
Willie Wheeler

オープンソースJava springフレームワークのページネーションに焦点を当てたライブラリを少し前に公開しました。

あまり成功していないが、おそらく誰かがそれを試してみたいと思うかもしれない。

でそれを使用するための例があります

オンラインの例はやや時代遅れなので、jdal-samplesファイルを sourceforge からダウンロードした方が良いでしょう。

2