Java Spring MVC-表单的多个提交按钮
我试图有2个提交按钮张贴到一个表单,每个按钮动作映射到不同的控制器。这是我的映射Java Spring MVC-表单的多个提交按钮,java,spring,controller,Java,Spring,Controller,我试图有2个提交按钮张贴到一个表单,每个按钮动作映射到不同的控制器。这是我的映射 @RequestMapping(value="/save", method=RequestMethod.POST, params="save") @RequestMapping(value="/save", method=RequestMethod.POST, params="renew") 我的提交按钮看起来像这样- <input type="submit" name="save" class="butt
@RequestMapping(value="/save", method=RequestMethod.POST, params="save")
@RequestMapping(value="/save", method=RequestMethod.POST, params="renew")
我的提交按钮看起来像这样-
<input type="submit" name="save" class="button" value="Save" />
<input type="submit" name="renew" class="button" value="Renew" />
奇怪的是,当这种情况发生时,我重新提交页面,之后一切正常。有没有更好的方法来实现我的目标
谢谢 只需使用类似的方法创建一个控制器
@RequestMapping(value="/save", method=RequestMethod.POST)
public String handlePost(@RequestParam(required=false , value = "save") String saveFlag , @RequestParam(required=false , value = "renew") String renewFlag){
if(saveFlag != null{
//handle save
}
else if(renewFlag !=null{
//handle renew
}
}
为什么不:
<input type="submit" name="action" value="save" />
如果表单指定了以下按钮:
input type="submit" class="button" name="save" value="Save"
input type="submit" class="button" name="delete" value="Delete"
input type="submit" class="button" name="cancel" value="Cancel"
您可以根据使用一个控制器按下的按钮指向不同的url请求
对于“取消”按钮
@RequestMapping(params = "cancel", method = RequestMethod.POST)
public String cancelUpdateUser(HttpServletRequest request) {
return "redirect:/users.html";
}
请求映射所做的是扫描post请求,如果它包含params name=cancel
对于“保存”按钮
@RequestMapping(params = "save", method = RequestMethod.POST)
public String saveUser(HttpServletRequest request, @ModelAttribute User user, BindingResult result, SessionStatus status) {
// validate your result
// if no errors, save it and redirect to successView.
}
如果您有更多的控制器方法具有相同的
@RequestMapping
,这些方法仅在参数
属性中不同,则必须显式写入:
- 请求中应该存在哪个参数,例如
params=“save”
- 请求中不应该存在哪个参数,例如
params=“!save”
@RequestMapping(value="/save", method=RequestMethod.POST, params={"save", "!renew"})
@RequestMapping(value="/save", method=RequestMethod.POST, params={"renew", "!save"})
这将修复错误为HTTP路径映射的不明确处理程序方法…
请参见另一种解决方案:
@RequestMapping(value="/save", method={RequestMethod.POST}, params={"save=Save"})
@RequestMapping(value="/save", method={RequestMethod.POST}, params={"renew=Renew"})
不确定这是否是您的问题,但请记住,如果用户除了单击按钮外,还通过输入键或某些其他方法提交表单,则某些浏览器不会发送任何按钮的键/值对。因此,请确保假定默认操作,为了浏览器兼容性,该操作需要是该表单html源中第一个按钮的操作。这似乎有点危险,因为
input
标记上的value
属性包含按钮的文本。我认为i18n不会是你使用这种方法的朋友。我对IE(10)没有始终如一地发布值存在问题,并采用了你的方法。虽然不是非常干净,但对我来说很有效。干杯
@RequestMapping(value="/save", method=RequestMethod.POST, params={"save", "!renew"})
@RequestMapping(value="/save", method=RequestMethod.POST, params={"renew", "!save"})
@RequestMapping(value="/save", method={RequestMethod.POST}, params={"save=Save"})
@RequestMapping(value="/save", method={RequestMethod.POST}, params={"renew=Renew"})