代码之家  ›  专栏  ›  技术社区  ›  Majid

如何只为所有控制器和页面绑定一次共享片段的数据?

  •  2
  • Majid  · 技术社区  · 6 年前

    我想展示一下 类别 在所有页面中列出。我有这个代码来显示 导航JSP :

    <c:forEach var="category" items="${categoryList}">
           <p><a href="showCategory?id=${category.id}">${category.title}</a></p>
    </c:forEach>
    

    我在控制器请求映射方法中使用此代码将值绑定到页面:

    model.addObject("categoryList", postCategoryList);
    

    我已经包括在内了 导航JSP 到主.jsp文件,它工作正常,但我有许多控制器和页面。如何绑定 categoryList 对于所有控制器和请求方法,值仅为一次?

    1 回复  |  直到 6 年前
        1
  •  1
  •   Minar Mahmud    6 年前

    使用 HandlerInterceptor .

    public class CategoryListAddInterceptor extends HandlerInterceptorAdapter {
    
        @Autowired
        private CategoryDao categoryDao; //for example
    
        @Override
        public void postHandle(HttpServletRequest request,
                               HttpServletResponse response,
                               Object handler,
                               ModelAndView modelAndView) throws Exception {
    
            modelAndView.getModel().put("categoryList", categoryDao.getPostCategoryList());
        }        
    }
    

    在配置XML文件中,添加:

    <mvc:interceptors>
        <mvc:interceptor>
            <mvc:mapping path="/**"/>
            <mvc:exclude-mapping path="/demo/**"/> <!-- can add exclude patterns if needed -->
            <bean class="package.name.CategoryListAddInterceptor"/>
        </mvc:interceptor>
    </mvc:interceptors>
    

    更新:

    正如你所得到的 NullPointerException 在呼叫时 modelAndView.getModel() 你可以这样做来实现同样的事情:

    @Override
    public void postHandle(HttpServletRequest request,
                           HttpServletResponse response,
                           Object handler,
                           ModelAndView modelAndView) throws Exception {
    
        request.setAttribute("categoryList", categoryDao.getPostCategoryList());
    }