Thymeleaf无法接收HandlerInterceptor返回的modelAndView

 @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        // 从cookie中获取凭证
        String ticket = CookieUtil.getValue(request, "ticket");
        if (ticket != null) {
            // 查询凭证
            LoginTicket loginTicket = userService.findLoginTicket(ticket);
            // 检查凭证是否有效
            if (loginTicket != null && loginTicket.getStatus() == 0 && loginTicket.getExpired().after(new Date())) {
                // 根据凭证查询用户
                User user = userService.findUserById(loginTicket.getUserId());
                // 在本次请求中持有用户
                hostHolder.setUser(user);
                System.out.println(hostHolder.toString());
            }
        }
        return true;
    }
@Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        User user = hostHolder.getUser();
        if (user != null && modelAndView != null) {
            modelAndView.addObject("loginUser", user);
        }
    }

实现拦截器HandlerInterceptor接口时传入用户的信息,从而在前端取到相对应的值。在controller层,根据请求打过来时传入的cookie得到相应的用户名,在数据库拿到相对应的ticket凭证,根据凭证查询用户,在本次请求中持有用户,并在postHandle返回前端一个modelAndView。但是很奇怪的是在使用thymeleaf拿到modelAndView中的loginUser时,如:

	<span class="dropdown-item text-center text-secondary" th:utext="${loginUser.username}">username</span>

一直报500错,控制台看原因是说无法解析thymeleaf的index页面的参数,可是后面加断点调试的时候明明modelAndView里面有值啊…
然后就很奇怪,检查了无数遍确认代码没问题,因为是说无法解析index页面的参数,所以后面尝试先不在index页面打印

th:utext="${loginUser.username}"

,先跑出一个modelAndView,看看会不会有一个“缓存”,成功执行后。再在index页面加上这句话,然后再跑一遍
结果就好了…
这坑爹的thymeleaf!!!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值