Tener esta función básica
protected ModelAndView handleRequestInternal(...) {
...
return new ModelAndView("welcomePage", "WelcomeMessage", message);
}
Sé que esto devolverá modelandView. Sé que welcomePage
es mi nombre de vista, por lo que significa que se llamará a algo como welcomepage.jsp
.
Pero estoy confundido con lo que es la parte modelo. ¿Qué es WelcomeMessage
y message
cómo funciona Model en ese escenario?
spring
spring-mvc
Premraj
fuente
fuente
WelcomeMessage
, en el segundo ejemplo lo llamémodel
. Utilice un nombre que tenga sentido para usted. El tercer argumento contiene la información ... podría ser una cadena simple, un POJO o un mapa ... básicamente cualquier información útil que desee mostrar en la vista.new ModelAndView("welcomePage", "WelcomeMessage", message);
es una abreviatura de
ModelAndView mav = new ModelAndView(); mav.setViewName("welcomePage"); mav.addObject("WelcomeMessage", message);
Si observa el código anterior, puede ver que el nombre de la vista es "welcomePage". Su
ViewResolver
(generalmente configurado en.../WEB-INF/spring-servlet.xml
) traducirá esto en una Vista. La última línea del código establece un atributo en su modelo (addObject("WelcomeMessage", message)
). Ahí es donde entra en juego el modelo.fuente
Todo está explicado por el javadoc para el constructor . Es un constructor de conveniencia que llena el modelo con un par de atributo / valor.
Entonces ...
new ModelAndView(view, name, value);
es equivalente a:
Map model = ... model.put(name, value); new ModelAndView(view, model);
fuente
Aquí, en este caso, tenemos 3 parámetros en el Método, a saber, ModelandView .
Según esta pregunta, el primer parámetro se comprende fácilmente. Representa la Vista que se mostrará al cliente.
Los otros dos parámetros son como The Pointer y The Holder, por lo
tanto, puede resumirlo así
ModelAndView ( vista, puntero, titular );
El puntero solo apunta la información en el titular
Cuando el Controlador vincula la Vista con esta información, entonces en dicho proceso, puede usar El Puntero en la página JSP para acceder a la información almacenada en El Titular para mostrar esa información respetada al cliente.
Aquí está la descripción visual del proceso respetado.
return new ModelAndView("welcomePage", "WelcomeMessage", message);
fuente
Bien, WelcomeMessage es solo un nombre de variable para el mensaje (modelo real con datos). Básicamente, está vinculando el modelo con la página de bienvenida aquí. El modelo (mensaje) estará disponible en welcomePage.jsp como WelcomeMessage. Aquí hay un ejemplo más simple:
ModelAndView("hello","myVar", "Hello World!");
En este caso, mi modelo es una cadena simple (en las aplicaciones, será un POJO con datos obtenidos para DB u otras fuentes). Lo estoy asignando a myVar y mi vista es hello.jsp. Ahora, myVar está disponible para mí en hello.jsp y puedo usarlo para mostrar.
En la vista, puede acceder a los datos sin embargo:
${myVar}
Del mismo modo, podrá acceder al modelo a través de la variable WelcomeMessage.
fuente
ModelAndView: el nombre en sí mismo explica que es la estructura de datos que contiene los datos de Model y 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 el modelo contiene solo un valor, podemos escribir lo siguiente:
ModelAndView("view.name","key.name", "key.value");
fuente
@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**
fuente