Mam menu, które jest oparte na danych (buforowane) i jest elementem globalnym. Chcę móc wprowadzać elementy menu dla każdego żądania, ponieważ każda strona będzie z niego korzystała. Jakie jest najlepsze miejsce, aby to ująć? Korzystam z adnotacji opartej na Spring3. Najlepsze rozwiązanie, jakie mogę sobie wyobrazić, to użycie OncePerRequestFilter i dodanie go tam lub podklasy kontrolera, ale nie wiem, jak to zrobić z adnotacją @Controller.Jakie są najlepsze praktyki dotyczące ustawiania globalnych atrybutów modelu w Spring MVC?
Odpowiedz
mogę myśleć o dwóch łatwych opcji:
Każda klasa @Controller
naraża dane jako metoda z dopiskiem @ModelAttribute
np
@ModelAttribute
public MyData getMyData() {
...
}
To niezbyt miłe, jeśli masz wiele kontrolerów. Ma to również irytujący efekt uboczny kodowania adresu URL dla każdego przekierowania, sugerując zamiast tego implementację i wystawianie danych na każde żądanie w ten sposób. Nie możesz użyć adnotacji-lovin, ale lepiej oddzielić ją od logiki biznesowej w ten sposób. Jest to podobne do twojego pomysłu OncePerRequestFilter
, ale o większej ilości Spring-y.
Można go zaimplementować jako HandlerInterceptor
.
Zobacz także:
Właśnie znalazłem odpowiedź na to samo pytanie. To część mojego postu:
Trzeba tylko ustawić wystawiać atrybutów modelu zmienna false na RedirectView.
Począwszy od wersji 3.2, można użyć @ControllerAdvice zamiast używać @ExceptionHandler, @InitBinder i @ModelAttribute w każdym kontrolerze. Zostaną one zastosowane do wszystkich komponentów bean @Controller.
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));
}
}
Gdybyś zaczął się z wiosennym Roo wygenerowany kod, lub ograniczyć adnotacje zeskanowane przez Component-skanować za pomocą zawierać filtr, następnie dodać wymaganą filtr w 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>
Może być także przydatny link o '@ ControllerAdvice' w' Spring 4': http://blog.codeleak.pl/2013/11/controlleradvice- improvement-in-spring.html – Andremoniy
Jeśli potrzebujesz dodać niektóre zmienne globalne, że każdy widok może rozwiązać te zmienne, dlaczego nie zdefiniować właściwości lub mapy ?, a następnie użyć sprężyny DI, zapoznaj się z komponentem bean resolwera widoku. jest bardzo użyteczny, na przykład statyczny, na przykład 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. CSS3 - Jakie są najlepsze praktyki dotyczące wydajności?
- 2. Jakie są najlepsze praktyki dotyczące używania wymagania w Ruby?
- 3. Jakie są najlepsze praktyki dotyczące interakcji klient-serwer?
- 4. Jakie są najlepsze praktyki dotyczące używania stref dostępności EC2?
- 5. Jakie są najlepsze praktyki i wskazówki dotyczące organizacji rozwiązania Xcode?
- 6. Jakie są najlepsze praktyki dotyczące oznaczania Docker Hub wersje
- 7. Najlepsze praktyki dotyczące debugowania
- 8. Jakie są najlepsze praktyki w ramach programu MEF?
- 9. Najlepsze praktyki dotyczące testowania integracji funkcji Eclipse
- 10. Najlepsze praktyki dotyczące przechowywania kluczy tajnych
- 11. Najlepsze praktyki dotyczące używania @ w C#
- 12. Najlepsze praktyki dotyczące przechowywania JSON w DOM
- 13. Najlepsze praktyki dotyczące lokalizacji aplikacji WWW ASP.NET
- 14. Najlepsze praktyki dotyczące obsługi wyjątków w SailsJS
- 15. Najlepsze praktyki dotyczące logowania do projektu django
- 16. Jakie są najlepsze praktyki w zwalczaniu problemu zamknięcia konsoli?
- 17. nhibernate: jakie są najlepsze praktyki w zakresie wdrażania równości?
- 18. Jakie są najlepsze praktyki w zakresie rejestrowania aplikacji korporacyjnych?
- 19. Jakie są najlepsze praktyki w pisaniu procedura przechowywana sql
- 20. Jakie są najlepsze praktyki dla plików we/wy w C?
- 21. Jakie są najlepsze praktyki dotyczące śledzenia ostrzeżeń/błędów w długich procesach?
- 22. Jakie są najlepsze praktyki dotyczące zarządzania wątkami tła w usługach IIS?
- 23. Jakie są najlepsze praktyki dotyczące wdrażania operatora == dla klasy w języku C#?
- 24. Najlepsze praktyki dotyczące przechowywania przesłanych plików w systemie plików
- 25. Jakie są zasady dotyczące deklaratywnego sposobu ustawiania urządzenia przez AutoFixture?
- 26. Jakie są najlepsze praktyki dotyczące programowania funkcjonalnego i interakcji z bazą danych?
- 27. Jakie są najlepsze praktyki jQuery dotyczące wygodnych metod Ajax i obsługi błędów?
- 28. Najlepsze praktyki dotyczące schematu SQL Server
- 29. Najlepsze praktyki dotyczące wysyłania wiadomości e-mail?
- 30. Najlepsze praktyki dotyczące generowania tokenów OAuth?
+1 za podanie efektu ubocznego ModelAttribute. Chciałbym, żeby ktoś mi to wcześniej powiedział :(Dzięki za wskazówki –