Интеграция Spring MVC и Tiles - PullRequest
0 голосов
/ 20 апреля 2011

Во-первых, я знаю, что Spring MVC хорошо интегрируется с Tiles. Но моя проблема, как показано ниже:

Я настроил свой web.xml как

<servlet>
    <description>Spring Dispatcher Servlet</description>
    <servlet-name>Dispatcher</servlet-name>
    <servlet-class>
        org.springframework.web.servlet.DispatcherServlet
    </servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>Dispatcher</servlet-name>
    <url-pattern>/*</url-pattern>
</servlet-mapping>

И мой Dispatcher-servlet.xml настроен следующим образом:

<bean class="org.springframework.web.servlet.view.tiles2.TilesConfigurer"> 
    <property name="definitions">
        <list>
            <value>
                /WEB-INF/tiles-defs/base-layout.xml
            </value>
            <value>
                /WEB-INF/tiles-defs/application-layout.xml
            </value>
        </list>
    </property> 
</bean>

<bean id="tilesViewResolver" 
            class="org.springframework.web.servlet.view.UrlBasedViewResolver">
    <property name="viewClass" 
            value="org.springframework.web.servlet.view.tiles2.TilesView" />
    <property name="order" value="1" />
</bean>

Обратите внимание, что сервлет Dispatcher сопоставлен для обработки всех запросов. Я не хочу настраивать его таким образом, чтобы он мог обрабатывать только определенные запросы, например, * .hmtl или * .do или * .form, потому что я хочу, чтобы мой URL был аккуратным, это требование.

У меня есть определение тайлов, как показано ниже

<tiles-definitions>

    <definition name="publicLayout" .
            template="/WEB-INF/tiles-layouts/publicLayout.jsp">
        <put-attribute name="title" value="Home Page" />
        <put-attribute name="body" value="" />
    </definition>

    <definition name="home" extends="publicLayout">
        <put-attribute name="body" value="/WEB-INF/jsp/home.jsp" />
    </definition>

</tiles-definitions>

Теперь, когда я делаю HTTP-запрос, чтобы сказать URL "http://localhost:8080/myapp/home",, аннотированный контроллер, сопоставленный с сопоставлением запросов" / home ", обрабатывает запрос и, наконец, возвращает ModelAndView с именем представления" home ".

Наконец, когда сервлет-диспетчер пытается отобразить страницу, он говорит:

Не найдено сопоставление для HTTP-запроса с URI [/myapp/WEB-INF/tiles-layouts/publicLayout.jsp]

Но когда я изменяю свое отображение сервлетов-диспетчеров так, чтобы * .html, оно работало нормально, чего я не хочу делать.

Что здесь можно сделать? я думаю, что это очень распространенная проблема.

1 Ответ

2 голосов
/ 20 апреля 2011

Для обработки всех запросов, кроме запросов на JSP, необходимо использовать

<url-pattern>/</url-pattern>
...