Ayant cette fonction de base
protected ModelAndView handleRequestInternal(...) {
...
return new ModelAndView("welcomePage", "WelcomeMessage", message);
}
Je sais que cela va retourner modelandView. Je sais que welcomePage
est mon nom de vue, ce qui signifie que quelque chose comme welcomepage.jsp
sera appelé.
Mais je suis confondu avec ce qui est partie modèle. Que sont WelcomeMessage
et message
et comment Model fonctionne-t-il dans ce scénario?
Le modèle présente un espace réservé pour stocker les informations que vous souhaitez afficher dans la vue. Ce pourrait être une chaîne, comme dans l'exemple ci-dessus, ou 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 ferez: -
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);
... alors dans votre jsp, vous pouvez faire: -
Hello ${model.name}! {model.message} // displays Hello Mike! Meow!
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 installé 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.
Tout est expliqué par le javadoc pour le constructeur . C'est un constructeur de commodité qui remplit le modèle avec une paire attribut/valeur.
Alors ...
new ModelAndView(view, name, value);
est équivalent à:
Map model = ...
model.put(name, value);
new ModelAndView(view, model);
WelcomeMessage est simplement un nom de variable pour le message (modèle actuel avec données). Fondamentalement, vous liez le modèle avec la page d’accueil ici. Le modèle (message) sera disponible dans welcomePage.jsp sous la forme WelcomeMessage . Voici un exemple plus simple:
ModelAndView("hello","myVar", "Hello World!");
Dans ce cas, mon modèle est une chaîne simple (dans les applications, il s'agira d'un POJO avec des données extraites pour une base de données ou d'autres sources.). Je l'assigne à 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 si:
${myVar}
De même, vous pourrez accéder au modèle via la variable WelcomeMessage.
@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**
ModelAndView: Le nom lui-même explique qu'il s'agit d'une structure de données qui contient les données Model et View.
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, nous pouvons écrire comme suit:
ModelAndView("view.name","key.name", "key.value");