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

56
задан kayess 5 April 2017 в 14:38
поделиться

3 ответа

Посмотрите на 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);
    }
}
87
ответ дан 26 November 2019 в 17:19
поделиться

Никто не приходит в голову, и Google также не обнаруживает каких-либо конкретных компонентов для этого (хотя он дает довольно много конкретных примеров и подсказок). Но теоретически всего набора кнопок и одного (или двух) параметров запроса более чем достаточно. Тогда позвольте SQL / DB делать свою работу. Я опубликовал ответ на аналогичный вопрос в контексте JSP / Servlet / DAO до здесь .

Это в основном сводится к передаче firstrow (индекс первой строки, которая будет отображаться на странице) в качестве параметра запроса и наличия двух кнопок / ссылок в форме разбивки на страницы, которая увеличивает / уменьшает firstrow с rowcount (количество строк, отображаемых одновременно на странице) в сочетании с запросом SQL, который возвращает подмножество результатов с помощью под каждым LIMIT , Предложение OFFSET , или подзапросы, или конкретные функции, в зависимости от рассматриваемой БД. См. Вышеупомянутый ответ для подробных примеров кода и SQL-запросов.

4
ответ дан 26 November 2019 в 17:19
поделиться

Я тоже искал способ сделать это, но не нашел ни одного стандартного компонента или библиотеки тегов. Я думаю, в основном потому, что разбиение на страницы может стать очень конкретным, поскольку вам уже нужно извлекать данные с помощью подкачки из базы данных (если вы используете 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
ответ дан 26 November 2019 в 17:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: