【问题标题】:Spring ModelAndView Attribute is nullSpring ModelAndView 属性为空
【发布时间】:2017-04-12 11:15:39
【问题描述】:

我有一个简单的控制器和一个拦截器。
在 postHandle 方法的拦截器中,我正在检查用户。
问题:我的用户模型有时在控制器句柄之间为空。

  1. home-handle 调用的 postHandle==> User-Model 不为空
  2. check_user-handle 调用的 postHandle ==> 用户模型为空
  3. redirectToErrorPage-handle 调用的 postHandle ==> 用户模型是 不再为空并包含我所期望的一切 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");
        }
    }
}

当我检索模型有哪些键时,当“check_user”调用 postHandle 时,我只有一个键“totalTime”。我的模型怎么了?

【问题讨论】:

    标签: spring controller interceptor modelandview


    【解决方案1】:

    尝试如下修改您的postHandle()

    ...
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        User user = (User) request.getSession().getAttribute("user");
    ...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-01-05
      • 2013-03-22
      • 2017-05-15
      • 1970-01-01
      • 1970-01-01
      • 2014-01-18
      • 2016-12-13
      相关资源
      最近更新 更多