java - Spring MVC - 多个提交按钮到表单

标签 java spring controller

我正在尝试将 2 个提交按钮发布到表单,每个按钮操作映射到不同的 Controller 。这是我的映射

@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" />

从我的映射中可以看出,我依靠使用参数来区分单击了哪个按钮。问题是它在 90% 的时间内都有效,但有时我会遇到以下异常 -

java.lang.IllegalStateException: Ambiguous handler methods mapped for HTTP path 'http://localhost:8090/myapp/save': {public java.lang.String com.myapp.SaveController.save(MyEntity,javax.servlet.http.HttpSession), public java.lang.String com.myapp.SaveController.saveAndRenew(MyEntity,javax.servlet.http.HttpSession)}
org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.lookupHandlerMethod(AbstractHandlerMethodMapping.java:248)
org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.getHandlerInternal(AbstractHandlerMethodMapping.java:194)

奇怪的是,当这种情况发生并且我重新提交页面时,之后一切正常。有没有更好的方法来实现我想要做的事情?

谢谢!

最佳答案

如果表单指定了这些按钮:

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"

您可以根据一个 Controller 按下的按钮指向不同的 url 请求。

取消按钮,

@RequestMapping(params = "cancel", method = RequestMethod.POST)
public String cancelUpdateUser(HttpServletRequest request) {
    return "redirect:/users.html";
}

请求映射的作用是扫描包含参数 name = cancel 的 post 请求。

保存按钮,

@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.
}

关于java - Spring MVC - 多个提交按钮到表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8954426/

相关文章:

java - 如何在构造函数中使用参数 Autowiring ?

spring - 如何避免在 requestMapping 方法中使用实体造成的漏洞?

Java 父子 JFrame

java - Jython 通过关键字参数传递来调用 Java 方法

java - 如何用java创建网络爬虫?

spring - 没有 servlet 不能自动启动 webapp

java - 使用 jdbcTemplate 时如何手动处理事务?

c# - 如何获取 Controller 名称和基本 Controller 中可用的数据?

mysql - 对象值未传递

java - 在派生类的泛型对象上调用基方法