Spring MVC pagination

493
04 марта 2017, 03:17

Прикрутил к простому 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. Подскажите, как этот параметр можно передавать и оперировать им в контроллере?

Спасибо!

READ ALSO
Прерывание выполнения метода [требует правки]

Прерывание выполнения метода [требует правки]

Как прервать выполнение метода?

270
LibGDX вращение объекта за курсором мыши

LibGDX вращение объекта за курсором мыши

Не нашел нужного метода по реализации вращения объекта за курсором мышиПытался сам реализовать это, но в связи с неопытностью, этого сделать...

313