一.跳转画面
还记得我们第二章中在web.xml中配置的前段控制器吗?
@RequestMapping("/init")
public String init(){
return "login";
}
当你打上断点,你就会发现他会走DispatcherServlet.doDispatch方法
由于我们还没有到研究源码程度,我只告诉你,定义了ModelAndView对象它里面即对model做了处理也对view做了处理。简单了解之后来看我们另一种跳画面的写法:
ModelAndView
@RequestMapping("/init")
public ModelAndView init(){
ModelAndView mv = new ModelAndView("login");
return mv;
}
我们这么写,和doDispatch异曲同工,在方法体内我们可以通过ModelAndView对象来是像请求域中添加模型数据的。
既然说了可以添加数据模型,我们试试
@RequestMapping("/init")
public ModelAndView init(){
ModelAndView mv = new ModelAndView("login");
mv.addObject("date", new Date());
return mv;
}
<form method="post" action="/spring/login">
${date}<br/>
用户名:<input type="text" name="userName"/><br/>
密码:<input type="text" name="password"><br/>
<button >Login</button>
</form>
看一下效果:
成功!!! 难道说要给jsp传参,我们一开始写的方法返回类型是String不可以?一定要返回ModelAndView才可以吗?当然不是。
使用Model参数对象
我们来改改login处理
@RequestMapping("/login")
public String login(UserLogin user, Model model){
model.addAttribute("name", user.getUserName());
return "index";
}
将初始化画面上输入的用户名在index.jsp 画面现实出来。
<body>
${name}登陆成功
</body>
点login之后跳转到index.jsp
使用ModelMap参数对象
再改一下login的java代码:
@RequestMapping("/login")
public String login(UserLogin user, ModelMap model){
// 第一种
model.addAttribute("name", user.getUserName());
// 第二种
model.put("pwd", user.getPassword());
return "index";
}
jsp改为:
<body>
${name}登陆成功,您的密码是:${pwd}
</body>
再看一下效果:
有没有注意,我的名字和密码没有输中文啊,如果你用了中文是不是出现了乱码?下一章我们就来解决乱码问题。