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


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

6 56

6 ответов:

посмотреть 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);
    }
}

Я тоже искал способ сделать это, но не нашел ни одного стандартного компонента или 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 вы получите объект пейджера в своем запросе.

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

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

вы когда-нибудь слышали о проекте Spring Data JPA? Существует хорошее гибкое решение с использованием интерфейса Pagable. Я нашел, что это самый простой способ добиться чистой, шаблонной пагинации. Проверьте больше на Главная страница Spring Data JPA.

вот ссылка на Spring Data JPA reference docs, где они имеют очень чистый подход к веб-пагинации.

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

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

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

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