使用一个Spring MVC控制器类处理两个不同的提交按钮请求

时间:2018-10-04 10:36:28

标签: spring-mvc spring-boot thymeleaf

我在百里香模板中有两个提交按钮。我希望它将其提交给同一控制器中的2个不同的动作。我做了这样的请求映射:

@RequestMapping(value="/directBind",  params={"send"})
public String send(Model model, @ModelAttribute(value="directBind") DirectBind directBind){

@RequestMapping(value="/directBind", params={"addPolicy"})
public String addPolicy(final DirectBind directBind, Model model){

html中的两个输入按钮:

 <input id="send"  type="submit" value="send" name="send" class="btn btn-success finish" data-loading-text="Sent!"/>

 <input type="submit"  name="addPolicy" class="btn btn-default" style="margin-left: 1rem; margin-bottom: 1rem;"><span class="fa fa-plus"></span> </input>

表格:

<form enctype="multipart/form-data" class="ui form" th:object="${directBind}" th:action="@{/send}" method="post"  style="padding:0 10px;">

它仅提交表单以发送操作。

2 个答案:

答案 0 :(得分:1)

我推断,您的意图是使用一个spring控制器处理来自两个提交按钮的提交动作。

  • 您可以为两个html输入按钮使用相同的名称和不同的值属性。按钮名称和值属性作为请求参数发送到控制器。这将使控制器能够确定单击了哪个按钮并采取适当的措施。

    <input id="send_id"  type="submit" name="action" value="send"/>
    <input id="addPolicy_id"  type="submit" name="action" value="addPolicy"/>

    @RequestMapping(value="/directBind")
    public String doExecute(@RequestParam("action") String action, Model model, @ModelAttribute(value="directBind") DirectBind directBind){
    if (action=="send"){
    //do something
    send();
    }
    if (action=="addPolicy"){
    //do something
    addPolicy();
    }
}

答案 1 :(得分:0)

我设法解决了这个问题。我在表单操作属性中使用了“ directBind”,并在请求映射中使用了参数鉴别符。有效!