Как связать данные для общего фрагмента только один раз для всех контроллеров и страниц? - PullRequest
0 голосов
/ 25 мая 2018

Я хочу показать категорию список на всех страницах.У меня есть этот код для отображения элементов в 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 Ответ

0 голосов
/ 26 мая 2018

Использование 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());
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...