Spring mvc redirect传递参数时异常
java.lang.IllegalStateException: Argument [RedirectAttributes] is of type Model or Map but is not assignable from the actual model. You may need to switch newer MVC infrastructure classes to use this argument.
org.springframework.web.bind.annotation.support.HandlerMethodInvoker.resolveHandlerArguments(HandlerMethodInvoker.java:322)
org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:171)
org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:439)
org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:427)
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:925)
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:856)
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:915)
org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:822)
javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:796)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
控制器端代码如下:
@RequestMapping(value="openAccount",method=RequestMethod.POST)
public String openAccount(RedirectAttributes reAttributes) {
//generate the 16 card number
String number = GenerateCardNumUtil.generateNum(16);
// model.addAttribute("bankcarNum", number);
reAttributes.addAttribute("bankcarNum", number);
return "redirect:/account/bindCard.jsp";
}
页面获取参数使用EL表达式${bankcarNum}时出现了上述异常信息。
解决办法依次如下:
在spring配置文件里面加入:
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation中加入:
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
同时还需要加上
<mvc:annotation-driven/>
此时,错误将不再出现了,但是页面并未取得预想的值。按照网上的说法应该是版本的问题了,将spring的配置文件版本均改为3.1支持。
还是没有取到值,但是发现在没改和改版本之前URL地址上多了一个参数:
http://localhost:8080/springMVC/account/bindCard.jsp?bankcarNum=6225476871951904
附加:
这个问题一直放在草稿箱,也没有去处理,如今,算是搞清楚这里的意思了。
前面已经提到,url地址有变化(附带着参数),其实已经成功了。不过要在页面取到值,需要做一点点变化
要用到${param.bankcarNum}就可以取到值了,同时如果传递中文,出现乱码的话(首先确保我的springMVC
有设置过滤器,编码格式为UTF-8,这种其实只是设置了,前台往后台参数传递的编码过滤,而tomcat容器向页面传递参数却没有配置),那么这种情况需要修改tomcat安装目录下的server.xml中的<connector标签下(之前改过8080端口的那个地方)加上URIEncoding="UTF-8"就OK了!
还有一个问题就是,当redirect传递参数时,自定义的对象在页面好像取不到值。后面有机会再来解决!