Spring MVC Webapp: где хранить пути к общим изображениям? - PullRequest
1 голос
/ 16 февраля 2009

Я создаю веб-приложение Spring MVC с Tiles / JSP в качестве технологии просмотра. Ранее я хранил пути к общим изображениям в классе Common:

 public final static String IMG_BREADCRUMBS_NEXT = "/shared/images/famfam/bullet_arrow_right.png";

Тогда я бы использовал этот класс в jsp, чтобы получить изображение, похожее на

 <img src="<%= Common.IMG_BREADCRUMBS_NEXT %>"/>

Я бы хотел избавиться от скриптлетов в моем коде jsp и использовать вместо этого jstl и т. Каков наилучший способ хранения такой информации? Это ресурсные связки? Как вы решили это?

Ответы [ 3 ]

2 голосов
/ 13 мая 2009

В конце концов, я использовал поддержку тем Spring для достижения того, чего хотел. В моем коде просмотра я использую тег <spring:theme code=""/>, чтобы получить путь к файлу изображения:

 <img src="<spring:theme code="theme.images.actions.edit.link"/>" />

Этот тег ведет себя как любой тег <fmt:message> или <spring:message>, но у него есть свои собственные "наборы сообщений". Необходимые конфигурации в моем applicationContext:

 <!-- 
    ========================================================= 
    Themes
    =========================================================
  -->
<bean id="themeResolver" class="org.springframework.web.servlet.theme.SessionThemeResolver">
    <property name="defaultThemeName" value="themes.default"/>
</bean>
<bean id="themeSource" class="org.springframework.ui.context.support.ResourceBundleThemeSource" />    

Все темы моего приложения хранятся в /WEB-INF/classes/themes/. Свойства темы по умолчанию находятся в /WEB-INF/classes/themes/default.properties Это выглядит так:

 ...
 theme.images.actions.show.link=/@contextPath@/shared/images/famfam/zoom.png
 theme.images.actions.delete.link=/@contextPath@/shared/images/famfam/cross.png
 ...

Чтобы изменить тему (и значки) моего приложения, я использую ThemeChangeInterceptor (в applicationContext)

<!--
========================================================= 
Theme resolving
=========================================================
--> 
<bean id="themeChangeInterceptor" class="org.springframework.web.servlet.theme.ThemeChangeInterceptor">
    <property name="paramName" value ="theme" />
</bean>

Это позволяет пользователю переключать тему с помощью параметра запроса "&theme=themes.default" или "&theme=themes.alternative".

Одной из ключевых частей моей настройки является @contextPath@ в файле свойств темы. Это заменяется во время процесса сборки Ant правильным контекстным путем для среды разработки / тестирования / производства. Ключевая часть моего build.xml:

    <!-- copy all common themes to classes -->
    <copy todir="${build.war}/WEB-INF/classes/themes" overwrite="true" filtering="true">
        <fileset dir="resources/themes" includes="**/*.properties" />
        <filterchain>
           <replacetokens>
                <token key="contextPath" value="${setup.contextPath}"/>
            </replacetokens>
        </filterchain>
    </copy>

Надеюсь, это даст вам "быстрый старт" в темах веб-приложений Spring. На мой взгляд, эта настройка позволяет легко изменять внешний вид приложения.

Ссылки:

1 голос
/ 16 февраля 2009

Используйте компонент конфигурации в области приложения, чтобы вы могли написать что-то вроде

<img src="${configuration.imagePath}/icon.png">

Я не использую Spring, но вы, вероятно, можете использовать внедрение зависимостей, чтобы сделать нечто похожее на то, что мы делаем в JBoss и Seam.

По сути, у нас есть класс POJO под названием Configuration, свойства которого являются параметрами конфигурации приложения, загруженными из конфигурации XML (на самом деле это JBoss MBean, но это не по теме). В этом примере у нашего компонента будет метод getImagePath().

Seam позаботится о создании единственного экземпляра bean-компонента конфигурации в области «application», чтобы он всегда был доступен для использования в выражениях, таких как приведенное выше.

0 голосов
/ 07 октября 2009

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

Можно ли сделать это и использовать весенние темы одновременно, чтобы сохранить тему в сеансе пользователя?

...