2012-05-16 6 views
7

Ich verwende Spring, um Nachrichten aus einer Eigenschaftendatei anzuzeigen. Ich möchte in der Lage sein, das <spring:message>-Tag zu überschreiben, um einen Wert aus einer Datenbank basierend auf dem angemeldeten Benutzer zu verwenden. Wenn dieser Wert nicht vorhanden ist, möchte ich, dass er wie bisher auf den Wert in der Eigenschaftendatei gesetzt wird.Spring überschreiben: Nachrichtentag mit Datenbankwerten

Kann mir jemand mit diesem Code helfen? Ich habe über AbstractMessageSource gelesen, aber ich weiß nicht, wie ich es implementieren soll.

Danke

Antwort

7

Sie müssen benutzerdefinierte Nachrichtenquelle implementieren. Es ist eine Klasse, die AbstractMessageSource erweitert und die abstrakte Methode resolveCode(java.lang.String, java.util.Locale) implementiert. Es gibt fast same question auf SO (es Lösung für Grails), aber ich denke, es ist guter Punkt aus zu starten ...

Werfen Sie einen Blick auf diese Themen in Spring Foren:

1

Sie müssen das Verhalten von <spring:message> nicht ändern, Sie müssen nur den Ort ändern, von dem es seine Nachrichten erhält.

Standardmäßig verwendet es die Bean messageSource im Kontext, die vom Typ MessageSource oder einer Unterklasse davon ist. Sie können Ihre eigene Klasse schreiben, die MessageSource implementiert, und fügen Sie das Ihrem Kontext als messageSource Bean hinzu.

AbstractMessageSource ist nur ein praktischer Ausgangspunkt für das Schreiben Ihrer eigenen MessageSource. Es macht einen Teil der Arbeit für Sie, nur Unterklasse es.

2

Ich habe am Ende erstellt eine Klasse namens DatabaseMessageSource unten enthalten. Ich muss noch eine Art Caching implementieren, damit ich nicht bei jedem Aufruf auf die Datenbank stoße. Diese link war auch hilfreich. Danke Skaffman und PrimosK, dass sie mich in die richtige Richtung weisen.

Ich aktualisiert meine ApplicationContext auf die neu erstellte Klasse zeigen habe ich es zu:

<bean id="messageSource" class="com.mycompany.mypackage.DatabaseMessageSource"> 
    <property name="basenames"> 
     <list> 
      <value>classpath:defaultMessages</value> 
     </list> 
    </property> 
    <property name="defaultEncoding" value="UTF-8"/>  
</bean>`enter code here` 
+0

Für Caching würde ich Ehcache vorschlagen ... Werfen Sie einen Blick auf [diese] (http://ehcache.org/documentation/recipes/thunderingherd) und [diese] (http: //ehcache.org/documentation/recipes/spring-annotations) .... – PrimosK

+0

Danke dafür. Ich werde den ersten Link implementieren. Du warst wirklich hilfreich. Danke nochmal – blong824

+0

Eine Folgefrage. Wie kann ich ein Objekt vom Controller an meine DatabaseMessageSource-Klasse übergeben? Das Objekt befindet sich zu dem Zeitpunkt, zu dem der Bildschirm mit den Spring: message tags geladen wird. – blong824

Verwandte Themen