Веб-приложение Spring MVC:Где хранить пути к общим изображениям?

StackOverflow https://stackoverflow.com/questions/553749

Вопрос

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

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

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

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

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

Это было полезно?

Решение

В конце концов я использовал поддержку тем 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 web app.На мой взгляд, эта настройка позволяет довольно легко изменить внешний вид приложения.

Ссылки:

Другие советы

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top