Pregunta ¿Qué es Model in ModelAndView de Spring MVC?


Tener esta función básica

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

Sé que esto devolverá modelandView. Yo sé eso welcomePage es mi nombre de vista por lo que significa algo así como welcomepage.jsp será llamado.

Pero estoy confundido con lo que es parte del Modelo. Que es WelcomeMessage y message y cómo funciona el modelo en ese escenario?


74
2018-02-20 05:07


origen


Respuestas:


El modelo presenta un marcador de posición para contener la información que desea mostrar en la vista. Podría ser una cadena, que está en su ejemplo anterior, o podría ser un objeto que contiene un montón de propiedades.

Ejemplo 1

Si usted tiene...

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

... luego en su jsp, para mostrar el mensaje, lo hará: -

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

Ejemplo 2

Si usted tiene...

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

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

... luego en tu jsp, puedes hacer:

Hello ${model.name}! {model.message} // displays Hello Mike! Meow!

103
2018-02-20 05:20



Todo está explicado por el javadoc para el constructor. Es un constructor de conveniencia que rellena el modelo con un par de atributo / valor.

Asi que ...

   new ModelAndView(view, name, value);

es equivalente a:

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

15
2018-02-20 05:23



nuevo ModelAndView ("welcomePage", "WelcomeMessage", mensaje);

es una abreviatura de

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

Mirando 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", mensaje)). Ahí es donde el modelo entra en juego.


15
2018-02-20 05:25



Aquí en este caso, estamos teniendo 3 parámetros en el Método a saber ModelandView.
De acuerdo con esta pregunta, el primer parámetro se entiende fácilmente a partir de la pregunta. Representa el Ver que se mostrará al cliente.
Los otros dos parámetros son como El puntero y El portador
Por lo tanto, puedes resumirlo así

ModelAndView (Vista, puntero, titular);

El puntero simplemente señala la información en el El portador

Cuando el Controlador une el Ver con esta información, entonces en dicho proceso, puede usar El puntero en el JSP página para acceder a la información almacenada en El portador para mostrar esa información respetada al cliente.
Aquí está la representación visual del proceso respetado.

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

enter image description here


14
2018-06-11 11:19



Bueno, WelcomeMessage es solo un nombre de variable para 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 aplicaciones esto 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, puedes acceder a los datos:

${myVar}

Del mismo modo, podrá acceder al modelo a través de la variable WelcomeMessage.


2
2018-02-20 05:14



ModelAndView: El nombre mismo explica que es una estructura de datos que contiene datos de Modelo y Vista.

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 único, podemos escribir de la siguiente manera:

ModelAndView("view.name","key.name", "key.value");

0
2018-06-19 00:13