Thymeleaf多个提交按钮在一个表单中

时间:2015-07-14 08:34:33

标签: java spring-mvc thymeleaf

我有一个带有一个表单和两个按钮的HTML页面片段:

<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>

控制器:

@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字符串。还有另一种方法可以为表单中的每个按钮创建一个操作吗?

5 个答案:

答案 0 :(得分:33)

您可以使用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() {}

答案 1 :(得分:3)

如果您不希望将每个选项作为新请求映射接收,而不是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;
    }
}

答案 2 :(得分:2)

这可以解决我的问题。 在提交按钮上使用 th:formaction ,这取决于您有多少个提交按钮 这对于通过不同的“提交”按钮为一个表单提供更多链接也很有用

<form action="#"  class="form" th:action="@{'/publish-post/'+${post.id}}" method="post">
<input class="savebtn" type="submit" value="Save" th:formaction="'/save-post/'+${post.id}">
<input class="publish" type="submit" value="Publish Article">
</form>

答案 3 :(得分:0)

对于多个提交按钮,以下对我有用。 注意:取消按钮中的th:formaction

<form action="#" th:action="@{/saveProducts}" th:object="${model}" method="post">
  <button type="submit" name="action" value="cancel" th:formaction="@{/cancelProducts}">CANCEL</button>
  <button type="submit" name="action" value="save">SAVE</button>
</form>

对于控制器:

   @RequestMapping(value="/saveProducts", method= RequestMethod.POST)
    public String save(@ModelAttribute SomeModel model) {
      *//Do something*
    }

    @RequestMapping(value="/cancelProducts", method=RequestMethod.POST)
    public String cancel(@ModelAttribute SomeModel model) {
      *//Do something*

    }

答案 4 :(得分:-3)

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

String btnName = request.getParameter("action");

if(btnName.equals("save"))
    // you code....
else if(btnName.equals("cancel"))
    // you code....