¿Qué es Model en ModelAndView de Spring MVC?

86

Tener esta función básica

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

Sé que esto devolverá modelandView. Sé que welcomePagees 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 WelcomeMessagey messagecómo funciona Model en ese escenario?

Premraj
fuente

Respuestas:

114

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 contenga un montón de propiedades.

Ejemplo 1

Si usted tiene...

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

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

... luego en su jsp, puede hacer: -

Hello ${model.name}! {model.message} // displays Hello Mike! Meow!
limc
fuente
4
lo que significa que WelcomeMessage es el nombre de la variable que se utilizará en jsp y "¡Bienvenido!" . Puede usted por favor decirme donde puedo encontrar qué otras cosas que el segundo argumento puede tomar como ahora entiendo que toma nombre de la variable, nombre del modelo, ¿hay alguna otra cosa que se puede tomar
4
El segundo argumento representa el nombre lógico de su modelo. Puede llamarlo como desee, pero este es el nombre que usará cuando haga referencia a su modelo en su JSP. En mi primer ejemplo lo llamé 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.
limc
24
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.

tres tazas
fuente
16

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);
Esteban C
fuente
14

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

ingrese la descripción de la imagen aquí

Tahir Hussain Mir
fuente
2

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.

Abdel Raoof
fuente
0

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");
Premraj
fuente
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
fuente