Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Thymeleaf一张表单中的多个提交按钮_Java_Spring Mvc_Thymeleaf - Fatal编程技术网

Java Thymeleaf一张表单中的多个提交按钮

Java Thymeleaf一张表单中的多个提交按钮,java,spring-mvc,thymeleaf,Java,Spring Mvc,Thymeleaf,我有一个带有一个表单和两个按钮的HTML页面片段: 拯救 取消 以及控制器: @RequestMapping(value="/edit", method=RequestMethod.POST) public ModelAndView edit(@ModelAttribute SomeModel model, @RequestParam(value="action", required=true) String action) { if (action.equals

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


拯救
取消
以及控制器:

@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() {}

如果您不想将每个选项都作为新的请求映射,则可以使用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;
    }
}

您可以知道单击了哪个提交按钮,然后对该按钮进行操作 这是密码

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

if(btnName.equals("save"))
    // you code....
else if(btnName.equals("cancel"))
    // you code....
这对我的问题有效。 在提交按钮上使用th:FORMATION这是关于您有多少个提交按钮的工作 这对于使用不同的提交按钮为一个表单提供更多链接也很有用

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


表单action url是“@{/action/edit}”,但在你的控制器中是“/edit”,你能告诉我你是如何链接你的html和控制器的吗?Pranesh Sahu,可能是控制器类上的前缀
@RequestMapping(value=“action”)
?很晚才注意到,但
中断default
中的code>是大量冗余的(因为
switch
语句仍然存在)。为了澄清否决票:这不仅与问题的要点完全不同(在这种情况下寻找避免
if
构造的方法),而且还使用
request.getParameter(…)
比使用
@RequestParam
将其直接连接到方法参数要糟糕得多(如问题代码中所述)。