Question

Je construis une application à l'aide de Spring MVC. Je souhaite apporter certaines modifications à mon modèle pour chaque contrôleur de l'application. En particulier, je souhaite insérer certaines données supplémentaires dans le modèle, qui seront présentes pour toutes les pages de l'application.

Je pouvais le faire de différentes manières: ajoutez simplement les données à la fin de chaque contrôleur, utilisez une sous-classe de Model qui ajoute mes données supplémentaires, utilisez une sous-classe de ModelAndView qui recouvre mon modèle, utilisez une sous-classe de VelocityView qui recouvre le Modèle avant de l'utiliser ... Je suis sûr qu'il existe d'autres options.

Mais j’ai une "élégance" contrainte: je ne veux pas écrire de code dans chaque contrôleur, je veux que ce comportement soit défini dans un-et-un-seul lieu. Idéalement, il serait contrôlé par mon fichier de configuration de bean IOC.

Quelqu'un at-il une recommandation sur la manière de réaliser cela avec élégance?

Était-ce utile?

La solution

Les aspects sont une bonne approche, mais Spring MVC facilite encore plus les choses: vous pouvez définir un HandlerInterceptor qui sera appelé avant ou après chaque traitement d'une demande. Dans la méthode postHandle HandlerInterceptor (dans votre classe qui implémente l'interface HandlerInterceptor), vous pouvez ajouter vos données à ModelAndView. Vous définissez quels gestionnaires doivent être interceptés dans votre fichier de configuration.

Autres conseils

Vous pouvez jeter un oeil sur l'utilisation de Aspects. Spring a même une extension AOP que vous pouvez utiliser. .

En résumé, un aspect vous permettrait de définir le code une fois qu’il serait ensuite "tissé". dans vos classes soit lorsque vous compilez les classes, soit quand elles sont chargées par le chargeur de classes. Il s’agit de choses relativement avancées et ce n’est pas le choix le plus intuitif pour les nouveaux programmeurs, mais il est conçu pour résoudre exactement le problème dont vous parlez.

Je me trompe peut-être, mais je soupçonne que vous avez mal décrit vos besoins.

Vous semblez dire "Je veux que certaines données soient ajoutées à mon modèle, pour tous les contrôleurs".

Je suppose que vous voulez dire "Je veux que certaines données soient disponibles pour toutes les vues".

Si mes soupçons sont corrects, l'ajout des données à votre modèle pollue votre modèle et constitue une violation du principe de responsabilité unique. Cela est particulièrement vrai si les mêmes données doivent être ajoutées à plusieurs modèles. Veillez à ne pas utiliser votre modèle comme un simple «transporteur» de données, car les données n’ont vraiment rien à voir avec le modèle.

Certes, je ne suis pas tout à fait au courant de la façon de procéder du Spring MVC, mais un exemple plus détaillé de ce que vous essayez de réaliser peut permettre une discussion plus éclairée.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top