bugfix> java > 投稿

見せたいカテゴリー すべてのページのリスト。アイテムを表示するためのこのコードがありますnav.jsp

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

コントローラリクエストマッピングメソッドでこのコードを使用して、値をページにバインドします。

model.addObject("categoryList", postCategoryList);

含めましたnav.jsp メインの.jspファイルに追加すると正常に動作しますが、多くのコントローラーとページがあります。 categoryList をバインドする方法すべてのコントローラーとリクエストメソッドに対して一度だけの値?

回答 1 件
  • 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());
        }        
    }
    
    

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

あなたの答え