Как настроить определения Spring и Apache Tiles для разрешения jsps из classpath - PullRequest
6 голосов
/ 08 июля 2011

Этот не очень короткий, поэтому, пожалуйста, потерпите меня.
Я занимаюсь разработкой веб-приложения с использованием Spring 3.0, Apache Tiles 2.2 и Spring WebFlow 2.2. Одним из важных требований является то, что он должен быть очень модульным, то есть каждый модуль приложения будет доставлен в виде отдельного файла Jar. Это можно сделать, загрузив ресурсы и конфиги через classpath.
Я хотел бы связать в этом jar-файле все классы, конфиги bean-компонентов, определения определений, определения потоков и страницы jsp для модуля. Первые 2 тривиальны.
Для следующих 2 я нашел решения:
определения потока
базовый путь может быть загружен из classpath

<webflow:flow-registry id="flowRegistry" flow-builder-services="flowBuilderServices" base-path="classpath:/org/example/webflow/samples">
    <webflow:flow-location-pattern value="/**/*-flow.xml" />
</webflow:flow-registry>

просмотр определений
TilesConfigurer также может загружаться через classpath

<bean id="tilesViewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver">
    <property name="viewClass" value="org.springframework.web.servlet.view.tiles2.TilesView"/>
</bean>
<bean id="tilesConfigurer" class="org.springframework.web.servlet.view.tiles2.TilesConfigurer">
    <property name="definitions">
        <list>
            <value>classpath:/org/example/**/tiles/tile-views.xml</value>
    </list>
</property>
</bean>

Осталось только разрешить страницы, желательно через что-то вроде:

<definition name="myPage" extends="main">
    <put-attribute name="header" value="classpath:/org/example/pages/headers/view_events.jsp" />
    <put-attribute name="siteContent" value="classpath:/org/example/pages/admin/view_events.jsp" />
    <put-attribute name="footer" value="classpath:/org/example/pages/blank.jsp" />
</definition>

Есть ли способ достичь желаемого результата? Самым близким, что я получил при поиске, была поддержка подстановочных знаков Apache Tiles и EL, но это не то, что мне нужно.
Заранее спасибо.

1 Ответ

2 голосов
/ 08 ноября 2011

У меня есть нечто очень похожее, как вы описали. Я решил добавить "tile-el" в мой файл pom.xml, тогда было достаточно просто переключить "value" на "expression" в моих определениях плиток, как это

   <definition name="mypage" extends="main">
        <put-attribute name="header" expression="${header}"/>

Вы даже можете играть с простым условием для выражения, подобного этому

<put-attribute name="header" expression="/WEB-INF/layouts/${bean.field ? 'path1/' : 'path2/'}header.jsp">
...