Spring ModelAndView属性为null
问题描述:
我有一个简单的控制器和一个拦截器。 在postHandle-method中的拦截器中,我正在检查用户。 问题:我的用户模型有时在控制器句柄之间为空。Spring ModelAndView属性为null
- 的postHandle由家庭手柄调用==>用户模型不为空
- 的postHandle通过check_user手柄调用==>用户模型是空
- 的postHandle通过redirectToErrorPage手柄调用= =>用户模型是 不再null,并包含所有内容,我期望通过 check_user-PostHandle调用。
这里是我的控制器
@Controller
@SessionAttributes("user")
public class HomeController {
@RequestMapping(value = "/", method = RequestMethod.GET)
public ModelAndView home(Model model, HttpServletRequest request, HttpSession session) {
User user = new User();
return new ModelAndView("login", "user", user);
////now User-Model was saved in the session
}
//now i'am redirectring user in the "check_user"-handle
@RequestMapping(value = "/check_user", method = RequestMethod.POST)
public ModelAndView checkUser(@Valid @ModelAttribute("user") User user, BindingResult bindingResult, Model model,
HttpServletRequest request, RedirectAttributes redirectAttr) {
RedirectView redirectView = null;
ModelAndView mav=null;
try {
if(!bindingResult.hasErrors()){
redirectView = new RedirectView("home");
redirectView.setStatusCode(HttpStatus.FOUND);
redirectAttr.addFlashAttribute("httpStatus", HttpStatus.FOUND);
mav = new ModelAndView(redirectView);
return mav; //at next i entry post-handle from interceptor,
//which says to me, that user-model is null.
}
}
//My interceptor redirects me to this handle.
//After this handle within interceptor method "postHandle", i see, that
//user-object exists
@RequestMapping(value = "/error", method = RequestMethod.GET)
public String redirectToErrorPage(HttpServletRequest request){
return "error";
}
}
我的拦截器:
public class UserInterceptor extends HandlerInterceptorAdapter {
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
User user = (User) modelAndView.getModel().get("user");
if(user == null || !user.isAdmin()){
response.sendRedirect(request.getContextPath()+"/failed");
}
}
}
虽然我retrive,我的模型有哪些键,当的postHandle被“check_user调用“,我只有一个键”totalTime“。我的模型正在发生什么?
答
尝试修改您的postHandle()
如下: ... @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { User user = (User) request.getSession().getAttribute("user"); ...