一种形式的 Thymeleaf 多个提交按钮
Thymeleaf multiple submit button in one form
我有一个 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
字符串。有没有另一种方法可以让我为表单中的 每个按钮 创建 一个动作 ?
您可以使用 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: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>
对于多个提交按钮,以下对我有用。
注意取消按钮中的: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*
}
我有一个 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
字符串。有没有另一种方法可以让我为表单中的 每个按钮 创建 一个动作 ?
您可以使用 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: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>
对于多个提交按钮,以下对我有用。 注意取消按钮中的: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*
}