Puis-je retourner deux modèles dans ModelAndView dans Spring MVC
Supposons que j'ai code suivant si j'ai un modèle
MyBean bean = new MyBean();
bean.setName("Mike");
bean.setMessage("Meow!");
return new ModelAndView("welcomePage","model",bean);
Mais si j'ai deux ou trois modèles comme
Supposons que sur mon un point de vue
je veux que le modèle avec userdetails , shoppingcart les détails et les détails de l'historique des
comment puis-je utiliser ModelAnd Vue pour revenir 2-3 modèles
source d'informationauteur
Vous devez vous connecter pour publier un commentaire.
Vous pouvez accomplir ceci, un certain nombre de façons, mais peut-être la façon la plus simple serait d'utiliser une carte
Puis, dans votre page, vous avez juste à ajouter un niveau supplémentaire lorsque vous y accédez
sinon, vous pouvez également modifier votre gestionnaire de signature à être quelque chose comme ceci
Lorsque vous le faire de cette façon, vous n'avez pas à retourner le modèle, car le Printemps tient à la référence, avant de les recevoir, et peut alors accéder par la suite. Personnellement, je trouve cette méthode un peu mieux parce qu'il fait de l'unité de test plus facile. Tout ce que vous avez à faire est de vérifier la chaîne de valeur de retour et l'utilisation d'un Ressort de se moquer de modèle (ou votre propre maquette de l'objet qui implémente l'
Model
interface).Modifier À l'adresse commentaires:
Cette source donne quelques exemples et décrit les différentes méthode de prise en charge des signatures. Plus précisément, consultez la section 15.3.2.3 pour une discussion des paramètres qui peuvent être transmis à des méthodes de gestionnaire.
Fondamentalement, le Printemps utilise le
@RequestMapping
annotations afin de déterminer les méthodes qui devraient être appelée en se basant sur une requête donnée. Le printemps est alors en mesure d'examiner la signature de la méthode et de générer les paramètres appropriés avant d'appeler la méthode. Dans le cas où vous retournez unModelAndView
objet, leModel
est créé lorsque le constructeur est appelé en fonction des paramètres que vous fournissez. Si vous ne fournissez pas tous les objets de modèle, puis un modèle vide est créé. Toutefois, lorsque vous spécifiez que vous devriez recevoir le modèle en tant que paramètre à la méthode de gestionnaire, le Printemps crée une instance d'unModel
objet pour vous et le transmet à votre méthode. Printemps détient une référence à ce modèle et, lors de votre méthode retourne, passe que le modèle de la vue web (par exemple une JSP de l'analyseur).Il vraiment est effectivement la même que le retour d'un
ModelAndView
objet à l'exception de ce qui rend les tests unitaires beaucoup plus facile et franchement, l'OMI a fait un plus propre et plus élégant de la mise en œuvre.Remarque: Gardez à l'esprit qu'un
Model
est vraiment juste une spécialeMap
objet (donc pourquoi supports à l'aide d'unModel
ouMap
de façon interchangeable dans les signatures de méthode). Il existe quelques méthodes supplémentaires et il prend également en charge implicite attribut de nommage. Par exemple, si vous étiez tout simplement de passer un objet sans lui donner un nom, leModel
objet de comprendre ce que le nom de l'objet en fonction du type d'objet, etc. Cependant, si vous fournissez toujours une "clé" pour l'objet que vous ajoutez au modèle, il se comporte exactement de la même comme unMap
.Oui, vous pouvez retourner arbitraire numéro de modèle attributs en les plaçant dans des
Map
:Note la terminologie - modèle est une carte, il se compose d'attributs de modèle (des objets individuels),
new ModelAndView("welcomePage","model",bean)
est une commodité constructeur pour créer un modèle avec un seul attribut.Il y a de bons exemples donnés. Juste pour ajouter, je suis vraiment devenu un fan des annotations en fonction de la méthodologie de faire cela. Je l'aime parce qu'il fournit un moyen propre de la mise en œuvre. Voici un exemple...