Подтвердить что ты не робот

Как реализовать разбиение на страницы в Spring MVC 3

Есть ли готовый, простой в использовании стандартный компонент разбиения на страницы/тег-lib или код-образец, доступный для разбивки на страницы в Spring MVC?

4b9b3361

Ответ 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.

Ответ 6

Я опубликовал Java-библиотеку с открытым исходным кодом, ориентированную на разбиение на страницы с помощью рамки spring некоторое время назад.

Хотя он не был очень успешным, возможно, кто-то может быть заинтересован в его попытке.

Есть примеры для использования с

Примеры в Интернете несколько устарели, лучше загрузите файл jdal-samples из sourceforge.