Java Thymeleaf一张表单中的多个提交按钮
我有一个带有一个表单和两个按钮的HTML页面片段: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
拯救
取消
以及控制器:
@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
将其直接连接到方法参数要糟糕得多(如问题代码中所述)。