RedirectView 所做的是将重定向标头发送到浏览器,以便浏览器完全重新加载页面,结果模型不会被带到那里(因为它现在由具有自己模型的登录控制器处理)。
您可以做的是通过请求属性传递错误:
在您的views.properties中:
loginController.(class)=org.springframework.web.servlet.view.InternalResourceView
loginController.url=/login.htm
然后代替 RedirectView 返回:
request.setAttribute("errors", "example errors");
return new ModelAndView("loginController");
并在您的登录控制器中检查此属性并将其添加到模型中。
更新:不使用views.properties:
request.setAttribute("errors", "example errors");
return new ModelAndView(new InternalResourceView("/login.htm"));
或者您可以将(另一个)内部视图解析器添加到您的 App-servlet.xml (来自 API 的注释:链接 ViewResolver 时,InternalResourceViewResolver 总是需要放在最后,因为它会尝试解析任何视图名称,无论底层资源是否确实存在。):
<bean id="viewResolver2"
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
</bean>
然后只需使用:
request.setAttribute("errors", "example errors");
return new ModelAndView("/login.htm");