Hooked to a simple CRUD paging application as follows:
On the same page, in addition to the list of users, there is a form for adding / editing them, well, in the users table there are buttons for each position:
<td><a href="<c:url value='/edit/${user.id}'/>">Edit</a></td> <td><a href="<c:url value='/remove/${user.id}'/>">Delete</a></td>
In the controller:
@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; }
At this stage, everything works, the list is paginated, navigation works, BUT, for example, being on page 2 we delete the user
@RequestMapping(value = "/remove/{id}") public String removeUser(@PathVariable("id") int id) { this.userService.removeUser(id); return "redirect:/users"; }
removal is successful, but the display of the list of users is reset to the 1st page. The same with add / edit operations. It is clear, because in each case
return "redirect: / users";
without request parameter with page number.
I am not yet strong in either JSP or Spring. Tell me, how can this parameter be transmitted and operated on it in the controller?
Thank!