Spring中Model家族之间的区别
1. Model
Model是一个接口,它的实现类为ExtendedModelMap,继承ModelMap类
2. ModelMap
ModelMap继承LinkedHashMap,spring框架自动创建实例并作为controller的入参,用户无需自己创建
3. ModelAndView
ModelAndView指模型和视图的集合,与ModelMap不同,他需要用户自己手动创建
@ModelAttribute注解的使用
准备前提
<div style="position: relative">
<form method="post" action="" style="position: absolute;left: 40%;top: 200px;">
<table cellspacing="0" cellpadding="5px" border="1">
<tr>
<td>用户名</td>
<td><input type="text" name="username"></td>
</tr>
<tr>
<td>密码</td>
<td><input type="password" name="pwd"></td>
</tr>
<%--<input type="hidden" name="choose" value="1">
<input type="hidden" name="test" value="1">--%>
<tr style="text-align: center">
<td colspan="2"><input type="submit" value="提交"></td>
</tr>
</table>
</form>
</div>
1. 运用在方法上
1.1 @ModelAttribute注解void返回值的方法
@Controller
public class HelloModelController {
@ModelAttribute
public void populateModel(@RequestParam("username") String abc, Model model) {
model.addAttribute("attributeName", abc);
System.out.println(111);
}
@RequestMapping(value = "/helloWorld",method = RequestMethod.POST)
public String helloWorld() {
return "forward:/test.jsp";
}
}
1.2 @ModelAttribute注释有返回值的方法
@Controller
public class HelloModelController {
@ModelAttribute
public Users populateModel(Users users) {
return users;
}
@RequestMapping("/helloWorld")
public String helloWorld() {
System.out.println("进入....");
return "forward:/test.jsp";
}
}
1.3 @ModelAttribute支持对象合并
@Controller
public class HelloModelController {
//方法一
@ModelAttribute
public Users populateModel(Users users) {
users.setAddress("zxcxzvzv");
return users;
}
@RequestMapping("/helloWorld")
public String helloWorld() {
System.out.println("进入....");
return "forward:/test.jsp";
}
//方法二
/*@ModelAttribute
public Users populateModel() {
Users users=new Users();
users.setAddress("zxcxzvzv");
return users;
}
@RequestMapping("/helloWorld")
public String helloWorld(Users users) {
System.out.println("进入....");
return "forward:test.jsp";
}*/
}
2.运用在参数上
@Controller
@RequestMapping(value="hello")
public class ModelAttributeTest {
@ModelAttribute("user1")
public User getUser() {
User user = new User();
user.setId(1L);
user.setName("jjjj");
user.setPassword("iiiii");
return user;
}
@RequestMapping(value = "hello7")
public ModelAndView doHello6(
@ModelAttribute("user1")
User user, ModelAndView modelAndView) {
System.out.println(user + ":hello7");
modelAndView.setViewName("redirect:/hello/hello4.do");
return modelAndView;
}
@RequestMapping(value = "hello4", method = {RequestMethod.GET, RequestMethod.POST})
public String doHello4(Map<String, Object> map) {
System.out.println(map.get("user1"));
return "success";
}
}
@SessionAttributes注解的使用
意义:若希望在多个请求之间共用某个模型属性数据,则可以在
控制器类上标注一个 @SessionAttributes, Spring MVC
将在模型中对应的属性暂存到 HttpSession 中。
储存方式:
– @SessionAttributes(types=User.class) 会将隐含模型中所有类型为 User.class 的属性添加到会话中。
– @SessionAttributes(value={“user1”, “user2”})
– @SessionAttributes(types={User.class, Dept.class})
– @SessionAttributes(value={“user1”, “user2”},
types={Dept.class})