Search code examples
javaspring-mvcthymeleaf

Thymeleaf multiple submit button in one form


I have a fragment of HTML page with one form and 2 button:

<form action="#" data-th-action="@{/action/edit}" data-th-object="${model}" method="post">
    <button type="submit" name="action" value="save">save</button>
    <button type="submit" name="action" value="cancel">cancel</button>
</form>

And the controller:

@RequestMapping(value="/edit", method=RequestMethod.POST)
public ModelAndView edit(@ModelAttribute SomeModel model, 
        @RequestParam(value="action", required=true) String action) {

    if (action.equals("save")) {
        // do something here     
    }

    if (action.equals("cancel")) {
       // do another thing
    }
    return modelAndView;
}

This work good, but if I have more button, I must add more if statement to check the action string. Is there another way that I can create one action for each button in the form?


Solution

  • You can create separate methods with different @RequestMappings using the params variable.

    @RequestMapping(value="/edit", method=RequestMethod.POST, params="action=save")
    public ModelAndView save() {}
    
    
    @RequestMapping(value="/edit", method=RequestMethod.POST, params="action=cancel")
    public ModelAndView cancel() {}