02
Мар
2017

Spring MVC pagination

Прикрутил к простому CRUD приложению пейджинг следующим образом:

  • В users.jsp:

    <div id="pagination">
    <c:url value="/users" var="prev">
        <c:param name="page" value="${page-1}"/>
    </c:url>
    <c:if test="${page > 1}">
        <a href="<c:out value="${prev}" />" class="pn prev">Prev</a>
    </c:if>
    <c:forEach begin="1" end="${maxPages}" step="1" varStatus="i">
        <c:choose>
            <c:when test="${page == i.index}">
                <span>${i.index}</span>
            </c:when>
            <c:otherwise>
                <c:url value="/users" var="url">
                    <c:param name="page" value="${i.index}"/>
                </c:url>
                <a href='<c:out value="${url}" />'>${i.index}</a>
            </c:otherwise>
        </c:choose>
    </c:forEach>
    <c:url value="/users" var="next">
        <c:param name="page" value="${page + 1}"/>
    </c:url>
    <c:if test="${page + 1 <= maxPages}">
        <a href='<c:out value="${next}" />' class="pn next">Next</a>
    </c:if>
    

На этой же странице кроме списка юзеров есть форма для их добавления/правки, ну и в таблице юзеров кнопки для каждой позиции:

<td><a href="<c:url value='/edit/${user.id}'/>">Edit</a></td>
<td><a href="<c:url value='/remove/${user.id}'/>">Delete</a></td>
  • В контроллере:

    @RequestMapping(value = "users", method = RequestMethod.GET)
    public ModelAndView listUsers(@RequestParam(required = false) Integer page) {
        ModelAndView modelAndView = new ModelAndView("users");
    
        List<User> users = userService.listUsers();
        PagedListHolder<User> pagedListHolder = new PagedListHolder<User>(users);
        pagedListHolder.setPageSize(pageSize);
        modelAndView.addObject("maxPages", pagedListHolder.getPageCount());
    
        if(page==null || page < 1 || page > pagedListHolder.getPageCount())
            page=1;
    
        modelAndView.addObject("page", page);
    
        if(page == null || page < 1 || page > pagedListHolder.getPageCount()){
            pagedListHolder.setPage(0);
            modelAndView.addObject("listUsers", pagedListHolder.getPageList());
        }
        else if(page <= pagedListHolder.getPageCount()) {
            pagedListHolder.setPage(page-1);
            modelAndView.addObject("listUsers", pagedListHolder.getPageList());
        }
    
        modelAndView.addObject("user", new User());
    
        return modelAndView;
    }
    

На этом этапе все работает, список разбит на страницы, навигация работает, НО находясь например на 2ой странице удаляем юзера

@RequestMapping(value = "/remove/{id}")
public String removeUser(@PathVariable("id") int id) {
    this.userService.removeUser(id);
    return "redirect:/users";
}

удаление проходит успешно, но отображение списка юзеров сбрасывается на 1ую страницу. То же самое и с операциями добавления/правки. Понятно, ведь в каждом случае

return "redirect:/users";

без параметра запроса с номером страницы.

Я пока еще не силен ни в JSP, ни в Spring. Подскажите, как этот параметр можно передавать и оперировать им в контроллере?

Спасибо!

Источник: https://ru.stackoverflow.com/questions/634557/spring-mvc-pagination

Share

Тебе может это понравится...