Как добавить колонтитулы .jsp в мое веб-приложение Spring MVC? - PullRequest
5 голосов
/ 23 февраля 2012

Как добавить колонтитулы .jsp в мое веб-приложение Spring MVC?

Я знаю, что есть много разных ответов, но я хотел бы знать (все они действительно, но более важно) чтоправильный способ сделать это? Я только изучаю Spring, и у меня есть подсказка, ответ лежит на HandlerInterceptor.Сейчас я могу просто сделать так .jsp включает.Даже с этим включенным решением, не могли бы вы подробно описать, где я расположил бы колонтитулы структурно?Любой совет или направление было бы замечательно.

Ответы [ 2 ]

8 голосов
/ 05 апреля 2012

Я нашел ваш вопрос во время исследования :-) Не уверен, что мое решение <good | bad | a hack | already exists> или есть лучший способ, но оно работает для моего текущего проекта.

В вашем myapp-servlet.xml вы можете расширить viewResolver viewClass своей собственной реализацией:

MyApp-servlet.xml

<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"
  p:viewClass="com.my.app.view.JstlView"
  p:prefix="/WEB-INF/views/"
  p:suffix=".jsp"/>

Переопределив renderMergedOutputModel, вы можете сделать так, чтобы все представления действительно были шаблоном, в котором вы можете определить свой глобальный макет, а затем просто <jsp:include/> свои частичные элементы.

JstlView.java

package com.my.app.view;

import java.util.*;
import org.springframework.web.servlet.view.InternalResourceView;
import javax.servlet.RequestDispatcher;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class JstlView extends InternalResourceView {
    @Override
    protected void renderMergedOutputModel(Map<String, Object> model, HttpServletRequest request, HttpServletResponse response) throws Exception {
        String dispatcherPath = prepareForRendering(request, response);

        // set original view being asked for as a request parameter
        request.setAttribute("partial", dispatcherPath.substring(dispatcherPath.lastIndexOf("/") + 1);

        // force everything to be template.jsp
        RequestDispatcher rd = request.getRequestDispatcher("/WEB-INF/views/template.jsp");
        rd.include(request, response);
    }
}

Если вы посмотрите Spring's InternalResourceView.java , вы получите лучшее представление о том, что делает Spring при определении того, какое представление использовать.

template.jsp

<!doctype html>
<html lang="en">
<head></head>
<body>
    <header>
        <jsp:include page="header.jsp"/>
    </header>
    <jsp:include page="${partial}"/>
    <footer>
        <jsp:include page="footer.jsp"/>
    </footer>
</body>
</html>

Как получить атрибут request / session / servletcontext в JSP с использованием EL? помог мне здесь с получением значения атрибута ${partial} out.

simple_partial.jsp

<p>I'm a partial!</p>

Затем в контроллере вернуть simple_partial представление

App.java

package com.my.app.controller;

import org.springframework.stereotype.Controller;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

@Controller
@RequestMapping(value="/")
public class App{
    @RequestMapping(method = RequestMethod.GET)
    public String index() {
        return "simple_partial";
    }
}

, которая будет завернута template.jsp и получит ответ.

0 голосов
/ 23 февраля 2012

Я бы порекомендовал SiteMesh первый и Плитка второй.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...