Spring MVC的ModelAndView中的Model是什么?

时间:2011-02-20 05:07:53

标签: spring spring-mvc

有这个基本功能

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

我知道这将返回modelandView。 我知道welcomePage是我的视图名称,因此意味着welcomepage.jsp会被调用。

但我对什么是模型部分感到困惑。 什么是WelcomeMessagemessage以及模型在该方案中的工作方式?

7 个答案:

答案 0 :(得分:111)

模型提供占位符以保存要在视图上显示的信息。它可以是一个字符串,在上面的示例中,或者它可以是包含一堆属性的对象。

示例1

如果你有......

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

...然后在你的jsp中,为了显示信息,你会做: -

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

示例2

如果你有......

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

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

...然后在你的jsp中,你可以这样做: -

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

答案 1 :(得分:18)

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

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

查看上面的代码,您可以看到视图名称是“welcomePage”。您的ViewResolver(通常在.../WEB-INF/spring-servlet.xml中设置)会将其转换为视图。代码的最后一行在模型中设置了一个属性(addObject("WelcomeMessage", message))。这就是模型发挥作用的地方。

答案 2 :(得分:15)

the constructor的javadoc解释了这一切。它是一个便利构造函数,用一个属性/值对填充模型。

所以......

   new ModelAndView(view, name, value);

相当于:

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

答案 3 :(得分:14)

在这种情况下, 我们在方法中有3个参数,即 ModelandView
根据这个问题,第一个参数很容易从这个问题中理解。它代表将显示给客户的查看 其他两个参数就像 The Pointer The Holder
因此,你可以这样总结一下

ModelAndView( 查看,指针,持有人 );

指针只是将信息指向 The Holder

控制器使用此信息绑定查看时,您可以在上述过程中使用中的指针 JSP 页面用于访问存储在持有者中的信息,以向客户端显示该受尊重的信息。
以下是对受尊重程序的直观描述。

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

enter image description here

答案 4 :(得分:2)

好吧,WelcomeMessage只是消息的变量名(带有数据的实际模型)。基本上,您在此处使用welcomePage绑定模型。 Model(消息)将在welcomePage.jsp中作为WelcomeMessage提供。 这是一个更简单的例子:

ModelAndView("hello","myVar", "Hello World!");

在这种情况下,我的模型是一个简单的字符串(在应用程序中,这将是一个POJO,其中包含为数据库或其他源提取的数据)。我将它分配给myVar,我的视图是hello.jsp。现在,myVar可以在hello.jsp中找到,我可以用它来显示。

在视图中,您可以访问数据:

${myVar}

同样,您将能够通过WelcomeMessage变量访问模型。

答案 5 :(得分:0)

ModelAndView:名称本身解释了它是包含模型和视图数据的数据结构。

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

如果model只包含单个值,我们可以写成如下:

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

答案 6 :(得分: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**