2013-12-24 2 views
3

Я хотел бы, чтобы включить страницу JSP для ExempleКак вызвать контроллер Spring MVC в JSP

<ui:include src="/WEB-INF/jsp/header.jsp" /> 

но мой header.jsp есть переменные и мне нужен контроллер для инициализации переменных тезисов, есть способ вызова контроллера и включить метод jsp контроллера в другой jsp?

Для примера;

<%@tag description="Overall Page template" pageEncoding="UTF-8"%> 
<%@attribute name="header" fragment="true"%> 
<%@attribute name="footer" fragment="true"%> 
<html> 
<body> 
    <div id="pageheader"> 
     //include my header controller 
     <ui:include src="/WEB-INF/jsp/header.jsp" /> 
    </div> 
    <div id="body"> 
     <jsp:doBody /> 
    </div> 
    <div id="pagefooter"> 
     //include my footer controller 
    </div> 
</body> 
</html> 

header.jsp

Header 
${test} 

мой метод заголовка

public String header(Map<String, Object> model){ 
    model.put("test", "test"); 
    return "header"; 
} 

Но контроллер не используется и ${test} пуст

ответ

2

Я думаю, если вы звоните контроллер MVC с точки зрения MVC, ваше приложение будет тормозить общие принципы MVC. Ваш код будет трудно отлаживать, трудно тестировать и трудно понять другим.

Возможно, было бы лучше подготовить атрибуты модели для всех частей вашего вида (основная часть страницы, верхний и нижний колонтитул) в одном контроллере. Модель, которую вы передаете в JSP-представление, доступна в составе настраиваемых JSP-тегов и JSP.

Вы можете использовать аннотированный метод @ModelAttribute для подачи атрибутов нескольким методам управления одновременно.

Вы можете использовать JSP tags вместо JSP-страниц, чтобы определить верхний и нижний колонтитулы (по крайней мере, так я делаю это в своем приложении).

0

Прежде всего, ваш JSP не должен «звонить» непосредственно на любой контроллер.

Во-вторых, я вижу, что вы используете Spring framework, а весной, от любого контроллера до JSP, в JSP передается только один объект модели. Поэтому, если в заголовке вам нужно инициализировать другую модель, вы должны вызвать URL-адрес контроллера вместо вызова header.jsp.

0

Ответы уже объяснили, что модель должна быть заполнена контроллером. ... Если вам нужны одни и те же переменные модели на всех страницах, например в верхнем или нижнем колонтитуле, общий способ состоит в том, чтобы обогатить модель в одном HandlerInterceptor, а не в каждом методе контроллера.

+0

ОК Я могу инициализировать свои переменные в HandlerInterceptor. в методах перехватчика у меня есть 3 объекта (запрос HttpServletRequest, ответ HttpServletResponse, обработчик объектов). Как я могу передать данные из перехватчика в контроллер или на страницы j jpp? – Ajouve

+0

@Ant: неправильный метод, используйте postHandle! – Ralph

Смежные вопросы