Spring MVC中的ModelAndView中的模型是什么?


86

具有此基本功能

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

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

但我对模型部分感到困惑。是什么WelcomeMessage以及message如何在场景模式的工作?

Answers:


114

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

例子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!

4
因此,这意味着WelcomeMessage是要在jsp和“ Welcome!”中使用的变量名。。您能告诉我在哪里可以找到第二个自变量的其他内容吗,就像现在我明白它需要变量名称,模型名称一样,它还有其他需要的内容吗

4
第二个参数表示模型的逻辑名称。您可以使用任意名称来命名它,但这是在JSP中引用模型时将使用的名称。在我的第一个示例中,我称之为WelcomeMessage,在第二个示例中,我称之为model。使用对您有意义的名称。第三个参数保存信息...它可以是一个简单的字符串,POJO或地图...基本上是您想在视图中显示的任何有用信息。
limc 2011年

24
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))中设置了一个属性。这就是模型起作用的地方。


16

javadoc对构造函数进行全部解释。这是一个方便的构造函数,使用一个属性/值对填充模型。

所以...

   new ModelAndView(view, name, value);

等效于:

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

14

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

ModelAndView(View,Pointer,Holder );

指针只是将信息指向持有人

控制器绑定查看此信息,然后在该过程中,你可以使用鼠标指针JSP页面访问存储在信息的持有人,以显示尊重的信息给客户端。
这是受人尊敬的过程的视觉描绘。

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

在此处输入图片说明


2

好吧,WelcomeMessage只是消息的变量名(带有数据的实际模型)。基本上,您是在这里将模型与welcomePage绑定在一起。该模型(消息)将在WelcomePage.jsp中作为WelcomeMessage提供。这是一个更简单的示例:

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

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

在视图中,您可以通过以下方式访问数据:

${myVar}

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


0

ModelAndView:名称本身说明它是包含Model和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");

如果模型仅包含单个值,我们可以编写如下:

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

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**
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.