Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.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 Spring MVC-表单的多个提交按钮_Java_Spring_Controller - Fatal编程技术网

Java Spring MVC-表单的多个提交按钮

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

我试图有2个提交按钮张贴到一个表单,每个按钮动作映射到不同的控制器。这是我的映射

@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"})