Есть ли готовый, простой в использовании стандартный компонент разбиения на страницы/тег-lib или код-образец, доступный для разбивки на страницы в Spring MVC?
Как реализовать разбиение на страницы в Spring MVC 3
Ответ 1
Посмотрите PagedListHolder
и другие классы из org.springframework.beans.support
.
См. JPetstore в примерах для некоторых примеров, например. в 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);
}
}
Ответ 2
Я искал способ сделать это тоже, но не нашел никакого стандартного компонента или taglib. Я думаю, в основном потому, что пейджинг может стать очень специфичным, так как вам нужно получить данные с пейджинга из базы данных уже (если вы используете Hibernate, вы можете легко сделать это с помощью 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
, вы получите объект пейджера в своем запросе.
Ответ 3
Никто не приходит в голову, и Google также не раскрывает каких-либо конкретных компонентов для этого (хотя он дает довольно конкретные примеры и подсказки). Но теоретически достаточно нескольких кнопок и одного (или двух) параметров запроса более чем достаточно. Затем пусть SQL/DB выполняет свою работу. Я отправил ответ на аналогичный вопрос в контексте JSP/Servlet/DAO до здесь.
В основном это сводится к тому, чтобы передать firstrow
(индекс первой строки, отображаемой на странице) вокруг параметра запроса, и иметь две кнопки/ссылки в форме разбиения на страницы, которая в/уменьшает firstrow
с помощью rowcount
(количество строк, отображаемых сразу на странице) в сочетании с SQL-запросом, который возвращает подмножество результатов с помощью под каждым LIMIT
, OFFSET
предложениями или подзапросами или конкретными функциями в зависимости от БД в вопрос. См. Приведенный ответ для подробных примеров кода и SQL-запросов.
Ответ 4
Вы когда-нибудь слышали о проекте Spring Data JPA? Существует приятное гибкое решение с использованием интерфейса Pagable. Я нашел, что это самый простой способ добиться чистой, без шаблонов разбивки на страницы. Подробнее читайте на странице Spring Главная страница данных JPA.
Ответ 5
Здесь ссылка на справочные документы Spring Data JPA, где у них очень чистый подход к разбивке на страницы.
Ответ 6
Я опубликовал Java-библиотеку с открытым исходным кодом, ориентированную на разбиение на страницы с помощью рамки spring некоторое время назад.
Хотя он не был очень успешным, возможно, кто-то может быть заинтересован в его попытке.
Есть примеры для использования с
Примеры в Интернете несколько устарели, лучше загрузите файл jdal-samples из sourceforge.