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

时间:2018-05-25 15:20:52

标签: java spring jsp spring-mvc

我想在所有页面中显示 category 列表。我有这个代码用于显示 nav.jsp

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

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

model.addObject("categoryList", postCategoryList);

我已将 nav.jsp 添加到主.jsp文件中,但它运行正常,但我有很多控制器和页面。对于所有控制器和请求方法,如何仅绑定categoryList值一次?

1 个答案:

答案 0 :(得分:1)

使用if

HandlerInterceptor

在config xml文件中,添加:

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());
    }        
}

<强>更新

正如您在调用<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()