Accéder aux beans Spring MVC DI de jsp
Dans certains frameworks MVC, vous pouvez appeler le contrôleur de l'action à partir de la vue si vous souhaitez exécuter un code et rendre certains vue partielle. Je ne sais pas quelle est la bonne façon de le faire dans Spring MVC
Je veux avoir un ensemble de JSP modèles. Certains d'entre eux seront mises en page de certains d'entre eux seront des petites pièces comme paginator, boîte de connexion, menu, tag cloud, etc etc etc. Chacune de ces composantes du besoin de quelques haricots ou de contrôleur de l'action à l'ensemble des données dans ViewAndModel de sorte que la vue pouvait l'utiliser.
Le problème est que je ne veux pas régler tous ces objets dans chaque appel. Mon registre contrôleur ne se préoccupe que de l'inscription de traitement. Alors maintenant, comment dois-je faire? Comment dois-je appeler DI haricots ou les contrôleurs de la vue de préparer des vues partielles? Ou devrais-je créer des mappages? Ou suis-je en approchant le problème de totalement mauvais angle?
source d'informationauteur Art79
Vous devez vous connecter pour publier un commentaire.
Spring-MVC peut exposer le contexte de l'application de haricots à la couche de la vue, si c'est ce que vous voulez faire.
Par exemple, la
InternalResourceViewResolver
peut être invité à exposer chaque haricot dans le contexte, ou seulement l'un d'entre eux. Jetez un oeil à la exposeContextBeansAsAttributes et exposedContextBeanNames propriétés.Par exemple, disons que vous avez voulu exposer les haricots
beanA
etbeanB
à votre Jsp. Vous pouvez déclarer l'avis de résolution dans votre contexte ainsi:Sinon, pour simplement exposer chaque haricot:
Si oui ou non c'est une bonne idée, c'est une autre question, mais le Printemps ne vous donner la possibilité.
De l'OMI
ajouter l'utilisation exposedContextBeanNames dans viewResolver haricot de configuration (il y a aussi possibilité d'utiliser le drapeau et c'est plutôt pas recommandé)
utiliser dans votre page JSP
Vous pouvez utiliser
spring:eval
tag:Où
@properties
est un haricot nom des propriétés au Printemps Contexte. Notez que cette approche n'utilise pasexposedContextBeanNames
de sorte qu'il peut être utilisé avec des Carreaux de points de Vue, par exemple (TilesViewResolver
n'a pas ce propery).Une partie essentielle de l'aide InternalResourceViewResolver semble que le Printemps doit être impliqué dans le flux de code lorsque la page jsp est en cours de traitement.
Si vous êtes accédant à la page jsp directement ou autrement, sans passer par un Printemps à base d'actions (par exemple peut-être en interne renvoi à une page jsp en raison de la connexion de configuration dans web.xml), alors cela ne marchera pas.
Cependant, il est possible de configurer votre application de sorte que certains haricots sont accessibles à tout ce qui peut arriver à la ServletContext (aka applicationScope) par le biais de
l'utilisation de la ServletContextAttributeExporter classe.
Dans votre configuration spring, ajouter:
Puis, dans une page JSP, vous pourriez avoir accès que bean avec:
ou si vous savez que vous n'avez pas de "attrname" attribut de manière plus précise la portée:
Évidemment, ce ne sera pas en mesure de se référer à la demande de l'étendue de session ou de haricots, mais si vous avez besoin d'accéder à un singleton bean, alors qu'il fonctionne très bien.
Ne jamais accéder à des composants de gestion de jsp vues; quelque chose comme sitemesh peut être utilisé pour combiner plusieurs points de vue dans un. Jsp convient également de ne pas invoquer les méthodes de contrôleur directement