Question

Je construis une application web Spring MVC avec Tiles / JSP comme la technologie d'affichage. Auparavant, je mis en mémoire les chemins d'accès aux images communes en classe commune:

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

Alors j'utiliser cette classe dans jsp pour obtenir l'image src comme

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

Je voudrais vous débarrasser de scriptlets dans mon code jsp et utiliser jstl etc. à la place. Quelle est la meilleure façon de stocker ce genre d'information? Est-ce bundles de ressources? Comment avez-vous résolu ce?

Était-ce utile?

La solution

En fin de compte je le soutien à thème de printemps pour obtenir ce que je voulais. Dans mon code de la vue que j'utilise la balise <spring:theme code=""/> pour obtenir le chemin vers le fichier d'image:

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

Cette balise se comporte comme une balise <fmt:message> ou <spring:message>, mais il a ses propres « faisceaux de message ». Les configurations nécessaires dans mon applicationContext sont:

 <!-- 
    ========================================================= 
    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" />    

Tous les thèmes de mon application sont stockés sous /WEB-INF/classes/themes/. Les propriétés du thème par défaut sont /WEB-INF/classes/themes/default.properties Il ressemble à ceci:

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

Pour changer le thème (et icônes) de mon application j'utilise un ThemeChangeInterceptor (en applicationContext)

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

Cela permet à l'utilisateur de changer le thème via un paramètre de demande de "&theme=themes.default" ou "&theme=themes.alternative".

Une partie clé de ma configuration est le @contextPath@ dans le fichier de propriétés du thème. Ceci est remplacé au cours du processus de construction Ant avec le chemin de contexte correct pour l'environnement de développement / test / production. La partie clé de mon build.xml est:

    <!-- 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>

J'espère que cela vous donne un « bon départ » sur des thèmes d'applications web de printemps. À mon avis cette configuration, il est assez facile de modifier l'apparence d'une application.

Références:

Autres conseils

Utilisez un grain de configuration champ d'application, de sorte que vous pouvez écrire quelque chose comme

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

Je ne l'utilise pas du printemps, mais vous pouvez probablement utiliser l'injection de dépendance pour faire quelque chose de semblable à ce que nous faisons dans JBoss et Seam.

En fait, nous avons une configuration appelée classe POJO dont les propriétés sont les paramètres de configuration de l'application, chargés d'une configuration XML (en fait un JBoss MBean, mais c'est hors-sujet). Dans cet exemple, notre haricot aurait une méthode getImagePath().

Seam prendre soin d'instancier une seule instance de la fève de configuration portée « application », de sorte qu'il est toujours disponible pour utiliser dans les expressions, comme celle-ci.

Ne serait-il plus robuste d'utiliser une classe qui a déterminé le thème basé sur une base de données. Cela permettrait aux utilisateurs d'administrer des thèmes et même mettre en œuvre des thèmes en fonction du temps ou de l'agent utilisateur?

Serait-il possible de le faire et utiliser des thèmes de printemps en même temps, pour sauver le thème de la session de l'utilisateur?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top