我想使用Spring 3.1中出现的RedirectAttibutes属性,我在控制器中有以下处理方法发布
@RequestMapping(value = "/register", method = RequestMethod.POST)
public String register(@ModelAttribute("admin") Admin admin, BindingResult bindingResult, SessionStatus sessionStatus, RedirectAttributes redirectAttributes) {
redirectAttributes.addAttribute("admin", admin);
if (bindingResult.hasErrors()) {
return REGISTRATION_VIEW;
}
sessionStatus.setComplete();
return "redirect:list";
}
但是当我提交表单时,我遇到以下异常:
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)
我遇到了一些使用redirectAttributes的问题,你无法使用ModelAndView作为返回类型。所以我只返回了字符串视图。
任何人都可以。告诉我哪里出错了?
感谢。
答案 0 :(得分:15)
Spring 3.1引入了新版本的Spring MVC后端实现(RequestMappingHandlerMapping
/ RequestMappingHandlerAdapter
)来替换旧版本(DefaultAnnotationHandlerMapping
/ AnnotationMethodHandlerAdapter
)。
Spring MVC 3.1的一些新功能,例如RedirectAttributes
,只有新实现支持。
如果使用<mvc:annotation-driven>
或@EnableWebMvc
启用Spring MVC,则默认情况下应启用新实现。但是,如果您手动声明HandlerMapping
和/或HandlerAdapter
或使用默认值,则需要明确切换到新实现(例如,切换到<mvc:annotation-driven>
,如果它没有不要破坏你的配置。