How to implement pagination in Spring MVC 3

JavaSpringSpring MvcServletsPagination

Java Problem Overview


Is there any out-of-the-box, easy to implement, standard pagination component/tag-lib or code-sample available for pagination in Spring MVC?

Java Solutions


Solution 1 - Java

Have a look at PagedListHolder and other classes from org.springframework.beans.support.

See the JPetstore in the samples for some examples, e.g. 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);
	}
}

Solution 2 - Java

I was looking for a way to do that, too, but didn't find any standard component or taglib. I think mainly because paging can become very specific since you need to retrieve your data with paging from the database already (if you are using Hibernate you can easily do that using the Criteria API). I came up with something like this:

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

If you now perform a request to http://domain/app/test.html?id=10&page=1&results=30&sortOrder=asc you will get the pager Object in your request.

Solution 3 - Java

Have you ever heard about the Spring Data JPA project? There is a nice flexible solution using the Pagable interface. I've found it to be the simplest way to achieve clean, boilerplate-free pagination. Check out more at the Spring Data JPA homepage.

Solution 4 - Java

No one comes to mind and Google also doesn't reveal any specific components for that (although it gives pretty much concrete examples and hints). But in theory just a bunch of buttons and one (or two) request parameters are more than sufficient. Then let the SQL/DB do its work. I've posted an answer to similar question in JSP/Servlet/DAO context before here.

It basically boils down to pass firstrow (index of first row to be displayed in a page) around as request parameter and having two buttons/links in the pagination form which in/decrements the firstrow with rowcount (amount of rows displayed at once in a page) in combination with a SQL query which returns a subset of the results with help of under each LIMIT, OFFSET clauses, or subselects, or specific functions, depending on the DB in question. See the aforelinked answer for detailed code examples and SQL queries.

Solution 5 - Java

Here's a link to the Spring Data JPA reference docs, where they have a very clean approach to web pagination.

Solution 6 - Java

I published an open source java library focused on pagination with spring framework some time ago.

Although it has not been very successful perhaps someone may be interested in trying it.

There are examples for using it with

The online examples are somewhat obsolete, better download the jdal-samples file from sourceforge.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionNachiketView Question on Stackoverflow
Solution 1 - JavaPascal ThiventView Answer on Stackoverflow
Solution 2 - JavaDaffView Answer on Stackoverflow
Solution 3 - JavaSÅ‚awomir BorowiecView Answer on Stackoverflow
Solution 4 - JavaBalusCView Answer on Stackoverflow
Solution 5 - Javauser41871View Answer on Stackoverflow
Solution 6 - JavaJose Luis MartinView Answer on Stackoverflow