2012-06-19 3 views
0

J'utilise Spring MVC dans mon application web. Pour chaque demande que je voudrais préparer l'environnement, par exemple charger des données à partir du magasin de données et enregistrez-le afin que chaque contrôleur puisse accéder à ces informations. Je suppose que c'est ce que les filtres sont pour (entre autres choses). Je peux attacher une information à la variable request dans un filtre, mais comment puis-je y accéder à partir du contrôleur? Ou y a-t-il une manière généralement meilleure de faire ceci?Spring MVC - comment passer des données du filtre au contrôleur

Répondre

1

Je pense que votre problème au moment est de savoir comment obtenir l'ensemble des données à l'intérieur de votre demande filtre (déjà fait par vous), puis l'accès à l'intérieur de la méthode hamdlerMapping de votre contrôleur (vous voulez atteindre).

Je suis d'accord avec les deux réponses précédentes, mais si vous avez décidé de le faire de cette façon seulement alors je pense que vous devriez suivre ma réponse. Dans la méthode du gestionnaire pour laquelle vous avez mappé votre demande dans votre automate, vous pouvez avoir un paramètre dans la signature de méthode pour HttpServletRequest request et il contiendra le paramètre de requête que vous avez défini dans votre filtre. Et vous pouvez l'obtenir à partir de cet objet de requête dans votre contrôleur.

J'espère que cela vous aide. À votre santé.

2

Je ne vois pas pourquoi c'est une bonne chose à faire, filtrer ou non.

Si vous avez vraiment des données en lecture seule dont chaque contrôleur a besoin, je pense qu'une solution de mise en cache qui est chargée au démarrage est une meilleure idée. Je ne ferais pas cela avec un filtre, et je ne chargerais pas chaque demande avec une telle chose. Une fois que c'est fait, pourquoi continuer à répéter l'action?

0

@duffymo est juste, mais si vous voulez vraiment faire que je vous suggère d'utiliser intercepteur http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/mvc.html#mvc-handlermapping-interceptor

+0

Un filtre n'est rien de plus qu'un intercepteur spécifique à HTTP. Mes commentaires au sujet de ne pas encombrer chaque demande avec une telle chose tiennent toujours. – duffymo

+0

Merci. Mais la question n'est toujours pas entièrement résolue ... comment puis-je transmettre des données d'un intercepteur au contrôleur? Prenons l'exemple utilisé dans la documentation de printemps en vérifiant les heures d'ouverture. Et si je voulais utiliser la valeur de l'heure actuelle dans chaque gestionnaire? Oui je pourrais le compter againg, mais alors je ferais la même chose deux fois dans chaque demande et je devrais également mettre une ligne redondante de code à chaque gestionnaire. Je sais que ce n'est pas un très bon exemple mais j'espère que vous comprendrez ce que je veux dire maintenant. – tobik

+0

vous pouvez par exemple utiliser request.setAttribute (arg0, arg1); eux vous cam récupérer cette date dans le contrôleur, ou peut-être dans une session –

Questions connexes