Qué es Model in ModelAndView de Spring MVC?


Que tiene esta función básica

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

Sé que esto devolverá ModelAndView. Sé que welcomePage es mi viewname, por lo que significa que algo como welcomepage.jsp será llamado.

Pero estoy confundido con lo que es parte modelo. ¿Qué es WelcomeMessage y message y cómo funciona el modelo en ese escenario?

Author: Premraj, 2011-02-20

7 answers

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 se encuentra en el 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!");

... entonces en tu jsp, para mostrar el mensaje, harás: -

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);

... entonces en tu jsp, puedes hacer: -

Hello ${model.name}! {model.message} // displays Hello Mike! Meow!
 103
Author: limc,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-09-24 22:24:16

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

So ...

   new ModelAndView(view, name, value);

Es equivalente a:

   Map model = ...
   model.put(name, value);
   new ModelAndView(view, model);
 15
Author: Stephen C,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-02-20 05:23:19

Nuevo modelo y vista ("welcomePage", "WelcomeMessage", mensaje);

Es la 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 (normalmente 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 el modelo entra en juego.

 15
Author: three-cups,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-02-20 05:25:50

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

Vista del modelo(Vista, Puntero, Titular);

El Puntero puntos de la información en el El Titular

Cuando el Controlador enlaza 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 representación visual de los respetados proceso.

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

introduzca la descripción de la imagen aquí

 14
Author: Tahir Hussain Mir,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-07-11 05:05:18

Bueno, WelcomeMessage es solo un nombre de variable para message (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 mensaje de bienvenida. He aquí 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 hola.jsp. Ahora, myVar está disponible para mí en hola.jsp y puedo usarlo para exhibirlo.

En la vista, puede acceder a los datos:

${myVar}

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

 2
Author: Abdel Raoof,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-02-20 05:22:56

ModelAndView: El propio nombre explica que es data structure la 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, podemos escribir de la siguiente manera:

ModelAndView("view.name","key.name", "key.value");
 0
Author: Premraj,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-06-19 00:13:52
@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**
 0
Author: Sunil,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-08-12 16:35:31