Thymeleaf多个提交按钮以一种forms

我有一个HTML页面的片段,其中包含一个表单和2个按钮:

和控制器:

 @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; } 

这项工作很好,但如果我有更多按钮,我必须添加更多if语句来检查action字符串。 还有另一种方法可以为表单中的每个按钮创建一个动作吗?

您可以使用params变量为不同的@RequestMappings创建单独的方法。

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

如果您不希望将每个选项作为新请求映射接收,而不是if-case,您可以使用switch case。

 @RequestMapping(value="/edit", method=RequestMethod.POST) public ModelAndView edit(@ModelAttribute SomeModel model, @RequestParam(value="action", required=true) String action) { switch(action) { case "save": // do stuff break; case "cancel": // do stuff break; case "newthing": // do stuff break; default: // do stuff break; } } 

您可以知道单击了哪个提交按钮,然后按下按钮。这是代码

 String btnName = request.getParameter("action"); if(btnName.equals("save")) // you code.... else if(btnName.equals("cancel")) // you code....