Ich habe ein Menü, das datengesteuert ist (zwischengespeichert) und es ist eine globale Komponente. Ich möchte in der Lage sein, die Menüelemente für jede Anfrage zu injizieren, da jede Seite sie verwenden wird. Was ist der beste Ort, um es zu sagen? Ich verwende Annotation-basierte Spring3. Die beste Lösung, die ich mir vorstellen kann, ist die Verwendung eines OncePerRequestFilter und das Hinzufügen dieser Klasse oder das Unterklassifizieren des Controllers, aber nicht sicher, wie dies mit der @Controller-Annotation zu tun ist.Was sind die besten Vorgehensweisen beim Festlegen globaler Modellattribute in Spring MVC?
Antwort
ich von zwei einfachen Möglichkeiten denken kann:
Jede @Controller
Klasse, um die Daten als eine Methode mit @ModelAttribute
kommentierte aussetzt , z.B
@ModelAttribute
public MyData getMyData() {
...
}
Das ist nicht wirklich nett, wenn Sie mehrere Controller haben, obwohl. Dies hat auch den ärgerlichen Nebeneffekt der Codierung der myData
auf die URL für jede Umleitung
Ich schlage stattdessen, dass eine HandlerInterceptor
implementieren, und die Daten auf jede Anfrage auf diese Weise offen legen. Sie können keine Annotation-Lovin verwenden, aber es ist auf diese Weise besser von Ihrer Geschäftslogik getrennt. Dies ist ähnlich wie Ihre OncePerRequestFilter
Idee, aber ein aber mehr Spring-y.
Sie können es als HandlerInterceptor
implementieren.
Siehe auch:
Ich habe gerade eine Antwort für die gleiche Frage gefunden. Es ist ein Teil meines Posts:
Sie nur das belichten festlegen müssen Modell falsch auf der RedirectView Variable Attribute.
Ab Spring 3.2 können Sie anstelle von @ExceptionHandler, @InitBinder und @ModelAttribute in jedem Controller @ControllerAdvice verwenden. Sie werden auf alle @Controller-Beans angewendet.
import org.springframework.beans.propertyeditors.StringTrimmerEditor;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.InitBinder;
import org.springframework.web.context.request.WebRequest;
@ControllerAdvice
public class GlobalBindingInitializer {
@InitBinder
public void registerCustomEditors(WebDataBinder binder, WebRequest request) {
binder.registerCustomEditor(String.class, new StringTrimmerEditor(true));
}
}
Wenn Sie mit Frühlings-Roo generierten Code begonnen hatte, oder zu begrenzen, die durch die Komponente-Scan gescannt Anmerkungen enthalten Filter verwenden, fügen Sie dann den gewünschten Filter in webmvc-config.xml
<!-- The controllers are autodetected POJOs labeled with the @Controller annotation. -->
<context:component-scan base-package="com.sensei.encore.maininterface" use-default-filters="false">
<context:include-filter expression="org.springframework.stereotype.Controller" type="annotation"/>
<!-- ADD THE BELOW LINE -->
<context:include-filter expression="org.springframework.web.bind.annotation.ControllerAdvice" type="annotation"/>
</context:component-scan>
Kann auch nützlicher Link über '@ ControllerAdvice' in' Frühling 4' sein: http://blog.codeleak.pl/2013/11/controllerradvice- Verbesserungen-im Frühling.html – Andremoniy
Wenn Sie einige globale Variablen hinzufügen müssen, die jede Sicht auf diese Variablen auflösen kann, warum definieren Sie nicht in einer Eigenschaft oder Map, dann verwenden Sie Spring DI, siehe View Resolver Bean. es ist sehr nützlich, wie statisch verifizierbar, z.B. resUrl.
<property name="viewResolvers">
<list>
<bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass"
value="org.springframework.web.servlet.view.JstlView" />
<property name="attributes" ref="env" />
<property name="exposeContextBeansAsAttributes" value="false" />
<property name="prefix" value="${webmvc.view.prefix}" />
<property name="suffix" value="${webmvc.view.suffix}" />
</bean>
</list>
</property>
- 1. Was sind die besten Vorgehensweisen bei der Autorisierung von Ressourcenlisten?
- 2. Was sind die besten Vorgehensweisen von Hadoop für die Behandlung von Ausnahmen in Mapper oder Reducer?
- 3. Was sind die besten Visual Studio Addins?
- 4. Was sind die besten Praktiken beim Erstellen von Mandantenfähigkeitsanwendungen?
- 5. Was sind die besten Visual Studio-Erweiterungen?
- 6. Was sind die besten programmbezogenen Screencasts?
- 7. Was sind die besten Plugins für Eclipse?
- 8. Was sind die besten Ruby Videos/Screencasts?
- 9. Was sind die besten Anwendungsbereiche für Dokumentspeicher?
- 10. Was sind die besten Eigenschaften von Scala?
- 11. MySQL-Indizes - Was sind die besten Praktiken?
- 12. Was sind die besten Tastaturmakros für die Programmierung in Windows?
- 13. Was sind alle Portlet-Klassen in Spring mvc?
- 14. Was sind die besten Spring-Converter-Strategien im Fall einer String-Konvertierung in einen Objektsatz?
- 15. Globaler Aktionsfilter in ASP.NET MVC
- 16. Was sind die besten Speicherbereinigungseinstellungen für die Clientseite?
- 17. Aktualisieren verwandter Modellattribute beim Löschen
- 18. Was sind die besten Referenzen für die Verwendung von jQuery?
- 19. Was sind gültige Rückgabetypen einer Spring MVC Controller-Methode?
- 20. Was sind die maximalen Spring-Eingangskanaladapter?
- 21. Was sind einige der besten Javascript-Speichererkennungstools?
- 22. Was sind die besten Möglichkeiten zur Anzeige von Text aus der Datenbank mit MVC
- 23. Was sind die besten leichten Lösungen für Drag & Drop?
- 24. Mehrere Sprachen für WCF-Webdienste. Was sind die besten Praktiken?
- 25. Was sind die besten Möglichkeiten, um Expression Engine zu sichern?
- 26. Was sind die besten ASP.NET-Leistungsindikatoren zum Überwachen?
- 27. Was sind die besten Praktiken für Kiln-Repositories?
- 28. Was sind die besten Java Social Networking Frameworks?
- 29. Was sind die besten Praktiken der iPAD GUI Entwicklung?
- 30. Transferobjekte, Spring MVC, Architektur
+1 für die Erwähnung der Nebeneffekt von ModelAttribute. Ich wünschte, dass jemand mir das vorher gesagt hatte :(Danke für die Richtung. –