Spring MVCのページネーションに使用できる、すぐに使用できる、実装が簡単な標準のページネーションコンポーネント/タグライブラリまたはコードサンプルはありますか?
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);
}
}
私もそれを行う方法を探していましたが、標準のコンポーネントや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
へのリクエストを実行すると、リクエストでページャーオブジェクトが取得されます。
誰も思い浮かばず、 Google もそのための特定のコンポーネントを明らかにしません(ただし、かなり具体的な例とヒントを提供します)。しかし、理論的には、ボタンの束と1つ(または2つ)の要求パラメーターで十分です。次に、SQL/DBに処理を行わせます。 here の前に、JSP/Servlet/DAOコンテキストで同様の質問に対する回答を投稿しました。
基本的には、firstrow
(ページに表示される最初の行のインデックス)をリクエストパラメーターとして渡し、firstrow
をイン/デクリメントするページネーションフォームに2つのボタン/リンクを配置します。 rowcount
(ページに一度に表示される行の量)と、各LIMIT
句、OFFSET
句の助けを借りて結果のサブセットを返すSQLクエリと組み合わせて、問題のDBに応じて、サブセレクト、または特定の機能。詳細なコード例とSQLクエリについては、前述の回答を参照してください。
Spring Data JPAプロジェクトについて聞いたことがありますか? Pagableインターフェースを使用した柔軟なソリューションがあります。クリーンで定型のないページネーションを実現する最も簡単な方法であることがわかりました。 Spring Data JPAホームページ で詳細を確認してください。
Spring Data JPAリファレンスドキュメントへのリンク 、Webページネーションに対する非常にクリーンなアプローチがあります。
オープンソースJava springフレームワークのページネーションに焦点を当てたライブラリを少し前に公開しました。
あまり成功していないが、おそらく誰かがそれを試してみたいと思うかもしれない。
でそれを使用するための例があります
オンラインの例はやや時代遅れなので、jdal-samplesファイルを sourceforge からダウンロードした方が良いでしょう。