Spring mvc redirect传递参数时异常RedirectAttributes

来源:互联网 发布:sai软件多大 编辑:程序博客网 时间:2024/06/04 17:43
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 numberString 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传递参数时,自定义的对象在页面好像取不到值。后面有机会再来解决!


  

0 0