Qu'est-ce que le modèle dans ModelAndView de Spring MVC?

86

Avoir cette fonction de base

protected ModelAndView handleRequestInternal(...) {
    ...
    return new ModelAndView("welcomePage", "WelcomeMessage", message);
}

Je sais que cela retournera modelandView. Je sais que welcomePagec'est mon nom de vue, donc cela signifie que quelque chose comme welcomepage.jspva être appelé.

Mais je suis confus avec ce qu'est la partie modèle. Qu'est-ce WelcomeMessageque messageet comment fonctionne Model dans ce scénario?

Premraj
la source

Réponses:

114

Le modèle présente un espace réservé pour contenir les informations que vous souhaitez afficher sur la vue. Cela pourrait être une chaîne, qui est dans votre exemple ci-dessus, ou il pourrait s'agir d'un objet contenant un tas de propriétés.

Exemple 1

Si tu as...

return new ModelAndView("welcomePage","WelcomeMessage","Welcome!");

... puis dans votre jsp, pour afficher le message, vous allez faire: -

Hello Stranger! ${WelcomeMessage} // displays Hello Stranger! Welcome!

Exemple 2

Si tu as...

MyBean bean = new MyBean();
bean.setName("Mike!");
bean.setMessage("Meow!");

return new ModelAndView("welcomePage","model",bean);

... puis dans votre jsp, vous pouvez faire: -

Hello ${model.name}! {model.message} // displays Hello Mike! Meow!
limc
la source
4
cela signifie donc que WelcomeMessage est le nom de la variable à utiliser dans jsp et "Welcome!" . Pouvez-vous s'il vous plaît me dire où je peux trouver les autres choses que le deuxième argument peut prendre, comme maintenant, je comprends qu'il prend le nom de la variable, le nom du modèle, y a-t-il autre chose que cela peut prendre
4
Le deuxième argument représente le nom logique de votre modèle. Vous pouvez l'appeler comme vous le souhaitez, mais c'est le nom que vous utiliserez pour référencer votre modèle dans votre JSP. Dans mon premier exemple, je l'ai appelé WelcomeMessage, dans le deuxième exemple, je l'ai appelé model. Utilisez un nom qui a du sens pour vous. Le troisième argument contient les informations ... il peut s'agir d'une simple chaîne, d'un POJO ou d'une carte ... en gros toutes les informations utiles que vous souhaitez afficher dans la vue.
limc
24
new ModelAndView("welcomePage", "WelcomeMessage", message);

est un raccourci pour

ModelAndView mav = new ModelAndView();
mav.setViewName("welcomePage");
mav.addObject("WelcomeMessage", message);

En regardant le code ci-dessus, vous pouvez voir que le nom de la vue est "welcomePage". Votre ViewResolver(généralement configuré dans .../WEB-INF/spring-servlet.xml) traduira cela en une vue. La dernière ligne du code définit un attribut dans votre modèle ( addObject("WelcomeMessage", message)). C'est là que le modèle entre en jeu.

trois tasses
la source
16

Tout est expliqué par le javadoc pour le constructeur . C'est un constructeur pratique qui remplit le modèle avec une paire attribut / valeur.

Donc ...

   new ModelAndView(view, name, value);

est équivalent à:

   Map model = ...
   model.put(name, value);
   new ModelAndView(view, model);
Stephen C
la source
14

Ici, dans ce cas, nous avons 3 paramètres dans la méthode, à savoir ModelandView .
Selon cette question, le premier paramètre est facilement compréhensible. Il représente la vue qui sera affichée au client.
Les deux autres paramètres sont comme le pointeur et le support.Vous
pouvez donc le résumer comme ceci

ModelAndView ( vue, pointeur, support );

Le pointeur pointe simplement les informations dans le support

Lorsque le contrôleur lie la vue avec ces informations, dans ledit processus, vous pouvez utiliser le pointeur dans la page JSP pour accéder aux informations stockées dans le titulaire afin d'afficher ces informations respectées au client.
Voici la représentation visuelle du processus respecté.

return new ModelAndView("welcomePage", "WelcomeMessage", message);

entrez la description de l'image ici

Tahir Hussain Mir
la source
2

Eh bien, WelcomeMessage est juste un nom de variable pour le message (modèle réel avec des données). Fondamentalement, vous liez le modèle à la page d'accueil ici. Le modèle (message) sera disponible dans welcomePage.jsp en tant que WelcomeMessage. Voici un exemple plus simple:

ModelAndView("hello","myVar", "Hello World!");

Dans ce cas, mon modèle est une simple chaîne (dans les applications, ce sera un POJO avec des données récupérées pour DB ou d'autres sources.). Je l'attribue à myVar et ma vue est hello.jsp. Maintenant, myVar est disponible pour moi dans hello.jsp et je peux l'utiliser pour l'affichage.

Dans la vue, vous pouvez accéder aux données cependant:

${myVar}

De même, vous pourrez accéder au modèle via la variable WelcomeMessage.

Abdel Raoof
la source
0

ModelAndView: Le nom lui-même explique qu'il s'agit d'une structure de données qui contient des données de modèle et de vue.

Map() model=new HashMap(); 
model.put("key.name", "key.value");
new ModelAndView("view.name", model);

// or as follows

ModelAndView mav = new ModelAndView();
mav.setViewName("view.name");
mav.addObject("key.name", "key.value");

si le modèle ne contient qu'une seule valeur, on peut écrire comme suit:

ModelAndView("view.name","key.name", "key.value");
Premraj
la source
0
@RequestMapping(value="/register",method=RequestMethod.POST)
   public ModelAndView postRegisterPage(HttpServletRequest request,HttpServletResponse response,
           @ModelAttribute("bean")RegisterModel bean)
   {
       RegisterService service = new RegisterService();
       boolean b = service.saveUser(bean);

       if(b)
       {
           return new ModelAndView("registerPage","errorMessage","Registered Successfully!");
       }
       else
       {
           return new ModelAndView("registerPage","errorMessage","ERROR!!");
       }
   }



/*  "registerPage" is the .jsp page -> which will viewed.
/* "errorMessage" is the variable that could be displayed in page using -> **${errorMessage}**
/* "Registered Successfully!" or "ERROR!!" is the message will be printed based on **if-else condition**
Sunil
la source