【问题标题】:Spring MVC FlashMap and RedirectAttributes request mappingSpring MVC FlashMap 和 RedirectAttributes 请求映射
【发布时间】:2011-12-08 21:39:37
【问题描述】:

昨天我下载了新的 Spring 3.1RC 来测试 Spring MVC 中刚刚引入的对 flash 作用域变量的支持。不幸的是,我无法让它工作......

我有一个 HTML 表单,其中包含一些没有 spring:forms 标签的复选框。像这样的:

<form action="/deleteaction" method="post">
<input type="checkbox" name="itemId" value="1" />
<input type="checkbox" name="itemId" value="2" />
<input type="submit" name="delete" value="Delete items" />
</form>

在 Flash 范围支持之前,我的带注释的控制器看起来像:

@RequestMapping(value = "/deleteaction", method = RequestMethod.POST, params={"delete"})
public String deleteItems(@RequestParam(value="itemId", required=false) String itemId[]) {

或者,我可以使用HttpServletRequest 代替@RequestParam

@RequestMapping(value = "/deleteaction", method = RequestMethod.POST, params={"delete"})
public String deleteItems(HttpServletRequest request) {
    String itemIds[] = request.getParameterValues("itemId");

两种方法都运行良好。如果我尝试在方法参数中添加RedirectAttributes,Spring会抛出异常:

@RequestMapping(value = "/deleteaction", method = RequestMethod.POST, params={"delete"})
public String deleteItems(@RequestParam(value="itemId", required=false) String itemId[], RedirectAttributes redirectAttrs) {

日志:

Oct 16, 2011 11:20:37 PM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [dispatcher] in context with path [/App] threw
    exception [Request processing failed; nested exception is
    java.lang.IllegalArgumentException: argument type mismatch] with root cause 
    java.lang.IllegalArgumentException: argument type mismatch

我做错了什么?如何获取 RedirectAttribues 参数,在哪里添加 flash 作用域变量?

【问题讨论】:

    标签: spring model-view-controller redirect flash-scope


    【解决方案1】:

    为了使用新的RedirectAttributes,必须在dispatcher-servlet.xml中替换旧的DefaultAnnotationHandlerMappingAnnotationMethodHandlerAdapterAnnotationMethodHandlerExceptionResolver

    一个机会是使用&lt;mvc:annotation-driven/&gt;,它在 Spring 3.1 中配置了新的类 RequestMappingHandlerMappingRequestMappingHandlerAdapterExceptionHandlerExceptionResolver 替换旧的类。

    否则,必须在dispatcher-servlet.xml 中显式配置新的处理程序类。

    这里有一些额外的信息:http://forum.springsource.org/showthread.php?115976-Spring-MVC-FlashMap-and-RedirectAttributes-request-mapping

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多