Zugriff auf Spring MVC DI Bohnen aus jsp
In einige MVC-frameworks können Sie call-controller-action aus der Sicht, wenn Sie ausführen möchten einige code und machen einige Teilansicht. Ich bin mir nicht sicher, was ist der richtige Weg, es zu tun in Spring MVC
Will ich haben Satz von JSP-templates. Einige von Ihnen werden Seitenlayouts einige von Ihnen werden kleine Komponenten wie paginator, login-box, Menü, tag-cloud etc etc etc. Jede dieser Komponente müssen einige Bohnen oder controller-Aktion, um einige Daten in ViewAndModel so, dass die view nutzen könnte.
Das problem ist, ich will nicht, um alle diese Objekte bei jedem Aufruf. Meine register-controller kümmert sich nur um die Registrierung der Verarbeitung. So nun wie mache ich es richtig? Wie rufe ich DI Bohnen oder-Controller aus dem Blick zu bereiten teilweise Ansichten? Oder sollte ich einige Zuordnungen? Oder bin ich nähert sich dem problem von der völlig falschen Winkel?
InformationsquelleAutor Art79 | 2010-01-15
Du musst angemeldet sein, um einen Kommentar abzugeben.
Spring-MVC aussetzen der Anwendungskontext die Bohnen in die view-Schicht, wenn es das ist, was Sie tun möchten.
Beispielsweise die
InternalResourceViewResolver
können angewiesen werden, zu entlarven jede bean im context, oder nur diejenigen angegeben. Werfen Sie einen Blick auf die exposeContextBeansAsAttributes und exposedContextBeanNames Eigenschaften.Zum Beispiel, sagen, Sie wollten, setzen Sie die Bohnen
beanA
undbeanB
zu Ihrer JSPs. Sie erklären würde, die view-resolver in Ihrem Kontext so:Alternativ einfach aussetzen jeder bean:
Nicht ob dies eine gute Idee ist, ist eine andere Frage, aber der Frühling gibt Ihnen die Möglichkeit.
InformationsquelleAutor
IMO
hinzufügen verwenden exposedContextBeanNames in viewResolver bean-Konfiguration (es besteht auch die Möglichkeit zur Verwendung von globalen flag und es ist eher nicht zu empfehlen)
verwenden Sie in Ihrem JSP -
InformationsquelleAutor
Können Sie
spring:eval
tag:Wo
@properties
ist ein bean-name Sie Eigenschaften im Frühjahr Kontext. Beachten Sie, dass dieser Ansatz nicht verwendetexposedContextBeanNames
, so kann es verwendet werden mit Fliesen Ansichten, zum Beispiel (TilesViewResolver
keinen solchen Anwesen).InformationsquelleAutor
Einen kritischen Teil mit InternalResourceViewResolver zu sein scheint, dass der Frühling muss einbezogen werden in die code flow, wenn die jsp-Seite wird bearbeitet.
Wenn Sie Zugriff auf die jsp-Seite direkt oder ansonsten die Umgehung jedes Frühjahr-basierte Aktion (z.B. vielleicht durch intern Weiterleitung auf eine jsp-Seite, die aufgrund der login-Konfiguration web.xml), das wird nicht funktionieren.
Allerdings ist es möglich, konfigurieren Sie Ihre Anwendung so, dass bestimmte Bohnen sind zu erreichen, um alles, kann man den ServletContext (aka applicationScope) durch
die Nutzung der ServletContextAttributeExporter Klasse.
In der spring-Konfiguration hinzufügen:
Dann, in einer JSP-Seite, die Sie zugreifen konnten, dass bean mit:
oder wenn Sie wissen, dass Sie nicht haben eine "attrname" - Attribut in einem spezifischeren Bereich, nur:
Offensichtlich nicht in der Lage, finden Sie in request-oder session-scope Bohnen, aber wenn Sie benötigen Zugriff auf ein singleton-bean, dann funktioniert es Super.
InformationsquelleAutor
Nie Zugang business-Komponenten aus jsp-Blick; so etwas wie sitemesh kann verwendet werden, kombinieren mehrere Ansichten in einem. Jsps sollten auch nicht auf controller-Methoden direkt
Wenn die teilweise Ansichten sind alle Teil der gleichen request-response cyhcle dann die main-view lassen sich alle Modell Daten für alle partielle views (als request-params natürlich)
meine Hauptansicht ist die Heimat.jsp und beinhaltet das Menü.jsp. Was meinst du mit "alle Modell Daten"? meinst du so etwas? <c:set var="menuItem" value="${menu}" /> <jsp:include page="menu.jsp"></jsp:include> Das problem im habend ist hier, dass ich nicht wollen, zu ${Menü} - Instanz aus alle controller, die ich haben kann. Ich möchte diese Betreuung eine separate "module". ich denke, es werden einige einfache Weg, um mit dieser Art von Fällen verwenden :- ) im gerade frisch auf den Frühling und kann es sehen :- )
sorry für die nicht erklärt mehr vollständig vor-ich war das schreiben auf einem Handy!!! 🙂 Nun, wenn ich mich Recht erinnere, können Sie festlegen, dass alle von den 'Modell' notwendigen Daten für das rendering einer view in den controller. Sie tun dies, indem Sie die java.util.Anzeigen, Funktionen wie die 'Modell', ein ModelAndView. Alle Map-Einträge ausgesetzt sind als request-scope-Attribute zur Verfügung gestellt und alle JSPs, die Teil der Anfrage-Antwort-Zyklus. Also, dein controller sollte in der Lage sein, fügen Sie einfach alle notwendigen Daten, für die alle partiellen sichten, und dann jeder Teil-Ansicht gerendert, mit Hilfe der Teilmenge der attrs, die es benötigt.
Ich sehe, dass in dem Beitrag, den Sie nicht wollen, um alle Daten für jeden nicht-zugehörigen partial-views im controller - dies ist für einen guten Grund. Ich nehme an, Sie haben könnte, filtern oder Abscheidern, dass die nicht verknüpften Attribute. oder irgendeine form der Verkettung (obwohl Verkettung kann schnell aus der hand).
InformationsquelleAutor