Cela peut sembler stupide aux experts de Spring
mais je dois demander. Comment décidez-vous quand utiliser ModelAndView
contre Model
?
Après tout, j'ai recherché la meilleure réponse que j'ai trouvée est celle-ci . Il a été mentionné que la ModelAndView
est une ancienne méthode et que la Model
avec une String
renvoyée est une nouvelle méthode dans Spring
.
Ma question est la suivante: allons-nous déconseiller l’ancienne ModelAndView
maintenant que nous avons Model
en main? Ou existe-t-il des cas pour lesquels vous devez utiliser ModelAndView
?.
En outre, est-ce que quelqu'un sait pourquoi il faut changer ModelAndView
en Model
et String
pour que View
et quels sont les avantages?
J'utilise toujours l'approche où les méthodes du contrôleur renvoient ModelAndView
. Tout simplement parce que cela tend à rendre les méthodes de contrôleur un peu plus concises. Les paramètres de la méthode sont maintenant strictement des paramètres input
. Et toutes les données liées à output
sont contenues dans l'objet renvoyé par la méthode.
Le style ModelAndView
semble résonner chez les personnes qui n'aiment pas mettre à jour les paramètres d'entrée d'une méthode. S'en tenir à la conviction que cela constituerait un effet secondaire, un schéma dangereux, car vous ne pouvez pas prédire de manière fiable ce que la méthode va faire - Elle pourrait renvoyer des données dans l'objet renvoyé ou aurait pu mettre à jour quoi que ce soit dans l'un des arguments en entrée.
Donc, certaines personnes continueront à préférer ModelAndView
.
Le nouveau style avec Model
comme paramètre de méthode et la chaîne renvoyée comme nom de vue. Semble provenir d'une approche de conception légèrement différente. Ici, les objets du modèle sont considérés comme une sorte d'événements ou d'éléments qui sont transmis à plusieurs gestionnaires, avant d'être renvoyés à la vue où ils sont rendus. Cela me rappelle comment les événements sont gérés dans le monde AWT/Swing. Ce modèle est plus cohérent avec l'approche où plusieurs gestionnaires pourraient s'appuyer sur les objets Model
, jusqu'à atteindre une vue.
En fin de compte, il ne semble donc pas y avoir de raison valable de critiquer ou de promouvoir l'une ou l'autre de ces approches. Vous devez utiliser un style plus cohérent avec votre philosophie de conception globale.
J'espère que cela t'aides.
Une différence que je peux voir est qu'avec l'objet ModelAndView, vous pouvez définir une référence directe à un objet de vue:
ModelAndView mav = ...
mav.setView(myView);
Considérant que si vous utilisez Model et String, vous avez besoin d'un résolveur de vues pour résoudre le nom de la vue en vue réelle
public String myHandler(...) {
return "myviewname"; // has to have a resolver from "myviewname" into an actual view
}
En ce qui concerne le référencement, nous pouvons utiliser ModelAndView pour appliquer la redirection 301 si nous avons des exigences à cet égard. Nous ne pouvons pas y parvenir à l'aide de Model.
@RequestMapping("/")
public ModelAndView AWBCOntroller() {
log.info("Tracking info");
ModelAndView mav = new ModelAndView();
mav.setViewName("index");
return mav;
}