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

lpwwtiir  于 2023-03-03  发布在  Spring
关注(0)|答案(6)|浏览(324)

我有一个HTML页面的一个窗体和2个按钮的片段:

<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字符串。有没有其他方法可以为表单中的每个按钮创建一个操作

oymdgrw7

oymdgrw71#

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

o75abkj42#

这工程在我的问题。使用th:formactionon submit button这是工作在多少你有submit button和这也是usefull给予更多的链接到一个表单与不同的submit button

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

epggiuax3#

如果您不想将每个选项都作为一个新的请求Map,那么您可以使用switch case来代替if 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;
    }
}
mznpcxlj

mznpcxlj4#

对于多个提交按钮,下面的方法对我很有效。* 注意:th:取消按钮中的格式操作。*

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

    }
wvt8vs2t

wvt8vs2t5#

HTML代码:

<div class="inner">
    <a href="#" th:onclick="|deleteContact(${c.cId})|" class="btn btn-danger btn-small">Delete</a>
<div class="inner">
    <form th:action="@{'/update-contact/'+${c.cId}}">
        <button type="submit" class="btn btn-primary btn-small">Update</button>
    </form>
</div>
</div>

CSS代码:

.inner {
    display: inline-block;
}

Here is output:

u7up0aaq

u7up0aaq6#

您可以知道哪个提交按钮被单击,然后对该按钮执行操作。

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

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

相关问题