Spring MVC pass same object between controller

前端 未结 2 1703
栀梦
栀梦 2020-12-16 02:29

In Spring MVC how do I pass an object between two controller methods? I have an update form and an updateController. In the controller I have 2 methods, one for fetching the

2条回答
  •  孤城傲影
    2020-12-16 02:41

    You have 3 options

    1. Use @SessionAttributes to store the object in the session in between requests.
    2. Use a @ModelAttribute annotated method to retrieve the object before each request
    3. Write your own code and store it in the session (similair to 1 but more work on your part).

    Option 1

    1. Add the @SessionAttributes annotation to your controller class
    2. Add the SessionStatus as a parameter to your update method and the setComplete() method when you are finished with the object

    @SessionAttributes("emp")
    public class EmployeeController {
    @RequestMapping(value = "/editEmpFormSubmission.html", method = RequestMethod.POST)
    public String editEmpFormSubmission(
        @RequestParam(value = "page", required = false) Integer page,
        @ModelAttribute("emp") Employee emp, BindingResult result,
        ModelMap model, HttpServletRequest request
        SessionStatus status) {
     // update changes in DB
     status.setComplete();
    }    
    } 
    

    Option 2

    1. Add the method which retrieves the object from the database and annotate it with @ModelAttribute
    2. Cleanup your showEmpDetails method as it should only return a view name

    public class EmployeeController {
        
        @ModelAttribute("emp")
        public Employee getEmployee(@RequestParam("empdId") Long id) {
            // Get employee using empId from DB
            return  emp;
        }
        
        @RequestMapping(value = "/showEmpDetail.html", method = RequestMethod.GET)
        public String showEmpDetails() {) {
            return "showEmpDetail";
        }
    }
    

    Option 3

    1. In your methods add the HttpSession as an argument
    2. In your showDetails method next to adding it to the model add it to the session
    3. In your editEmpFormSubmission use the one from the session and copy all non-null fields to the object from the session and store that in the database.

    I wouldn't go for option, I strongly would suggest option 1 especially including the setComplete() on the SessionStatus object for cleanup. You could also combine 1 and 2 (have a @ModelAttribute annotated method and still use @SessionAttributes.).

提交回复
热议问题