有这个基本功能
protected ModelAndView handleRequestInternal(...) {
...
return new ModelAndView("welcomePage", "WelcomeMessage", message);
}
我知道这将返回modelandView。
我知道welcomePage
是我的视图名称,因此意味着welcomepage.jsp
会被调用。
但我对什么是模型部分感到困惑。
什么是WelcomeMessage
和message
以及模型在该方案中的工作方式?
答案 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);
答案 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**