Frage

Ich baue eine Spring MVC Web-Anwendung mit Tiles / JSP als View-Technologie. Zuvor gespeicherte ich die Pfade zu gemeinsamen Bildern in der Klasse Häufig:

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

Dann würde ich diese Klasse in jsp, um das Bild src wie

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

Ich möchte von Scriptlets in meinem jsp Code loszuwerden und verwenden jstl usw. statt. Was ist der beste Weg, um diese Art von Informationen zu speichern? Ist es Ressourcenbündel? Wie haben Sie gelöst das?

War es hilfreich?

Lösung

Am Ende habe ich Spring Theme-Unterstützung zu erreichen, was ich wollte. Meiner Ansicht Code verwende ich den <spring:theme code=""/> Tag den Pfad zur Bilddatei zu erhalten:

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

Dieser Tag verhält sich wie jeder <fmt:message> oder <spring:message> Tag, aber es hat seine eigenen "Message Bundles". Die notwendigen Konfigurationen in meiner application sind:

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

Alle Themen meiner Bewerbung sind unter /WEB-INF/classes/themes/ gespeichert. Die Standard-Theme Eigenschaften sind in /WEB-INF/classes/themes/default.properties Es sieht wie folgt aus:

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

Um das Thema zu ändern (und Symbole) meine app verwende ich eine ThemeChangeInterceptor (in application)

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

Dies ermöglicht den Anwender das Thema über ein "&theme=themes.default" oder "&theme=themes.alternative" Anforderungsparameter zu wechseln.

Ein wichtiger Teil meines Setup ist die @contextPath@ in der Thema Eigenschaftsdatei. Dies wird während des Ant-Build-Prozesses mit dem richtigen Kontext Weg für die Entwicklung / Prüf- / Produktionsumgebung ersetzt. Der wichtigste Teil meiner build.xml ist:

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

Ich hoffe, das gibt Ihnen einen „fliegenden Start“ in den Spring Web-App Themen. Meiner Meinung nach macht diese Einrichtung es ganz einfach, das Aussehen und das Gefühl von einer Anwendung zu ändern.

Referenzen:

Andere Tipps

einen Konfigurations-Bean in der Anwendung Bereich verwenden, so können Sie so etwas wie

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

Ich benutze Frühling nicht, aber man kann wahrscheinlich Dependency Injection verwenden etwas Ähnliches zu tun, was wir tun, in JBoss Seam und.

Im Grunde haben wir eine POJO-Klasse aus einer XML-Konfiguration namens Parameter Konfiguration, deren Eigenschaften die Konfiguration der Applikation geladen (eigentlich ein JBoss MBean, aber das ist off-topic). In diesem Beispiel würde unsere Bohne eine getImagePath() Methode hat.

Seam wird in ‚Anwendung‘ Rahmen sorgt eine einzelne Instanz des Konfigurations-Bean von instanziiert wird, so dass es immer verfügbar ist, in Ausdrücke zu verwenden, wie die oben.

Wäre es nicht robust sein, um eine Klasse zu verwenden, die das Thema auf einer Datenbank bestimmt. Dies würde es ermöglichen Benutzer Themen zu verwalten und sogar Themen basierend auf Zeit oder den User-Agenten implementieren?

Wäre es möglich, dies zu tun und im Frühjahr Themen zur gleichen Zeit nutzen, um das Thema in der Benutzer-Session zu speichern?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top