Spring MVC - Multiple submit button to a Form Spring MVC - Multiple submit button to a Form java java

Spring MVC - Multiple submit button to a Form


if the form has these buttons specified:

input type="submit" class="button" name="save" value="Save"input type="submit" class="button" name="delete" value="Delete"input type="submit" class="button" name="cancel" value="Cancel"

you may direct to different url request according to button pressed with one controller.

for cancel button,

@RequestMapping(params = "cancel", method = RequestMethod.POST)public String cancelUpdateUser(HttpServletRequest request) {    return "redirect:/users.html";}

what request mapping does is to scan post request if it contains params name = cancel.

for save button,

@RequestMapping(params = "save", method = RequestMethod.POST)public String saveUser(HttpServletRequest request, @ModelAttribute User user, BindingResult result, SessionStatus status) {    // validate your result    // if no errors, save it and redirect to successView.}


Why not:

<input type="submit" name="action" value="save" />

and then:

@RequestMapping(value="/save", method=RequestMethod.POST)public String handlePost(@RequestParam String action){    if( action.equals("save") ){       //handle save    }    else if( action.equals("renew") ){       //handle renew    }} 


If You have more controller methods with the same @RequestMapping that differs only in params attribute, You have to explicitly write:

  • which parameter is supposed to be present in the request, e.g. params="save"
  • which parameter is NOT supposed to be present in the request, e.g. params="!save"

In Your case:

@RequestMapping(value="/save", method=RequestMethod.POST, params={"save", "!renew"})@RequestMapping(value="/save", method=RequestMethod.POST, params={"renew", "!save"})

This should fix error Ambiguous handler methods mapped for HTTP path ...

See Spring Web API 4.0.x - RequestMapping#params