第一种:使用modelAndView传值
第一步:前端发送一个请求
<a href="${pageContext.request.contextPath}/valuetrantest.action">测试页面传值</a>
第二步:后端使用modelAndView处理
我们可以看到,这里返回到了另外一个jsp界面,并且往里面存了一个值,这实际上是把值存到了request域中
@RequestMapping("/valuetrantest")
public ModelAndView test10(){
System.out.println("valuetrantest");
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("name","蒲胤臻");
modelAndView.setViewName("resoult.jsp");
return modelAndView;
}
第二种:使用model传值(和第一种基本一致,只是少了一个view)
第一步:前端发送一个请求
<a href="${pageContext.request.contextPath}/modeltest.action">测试model</a>
第二步:后端使用model处理(这里同样是存到了request域当中)
@RequestMapping("/modeltest")
public String test11(Model model){
System.out.println("modeltest");
model.addAttribute("name","小明");
ModelAndView modelAndView = new ModelAndView();
return "resoult.jsp";
}
model中的方法介绍:
- asMap():把当前的model转换成为一个map
model.addAttribute("name","小明");
- addAttribute():直接往request中存数据,可以自己设定名和值,也可以直接存一个对象,存对象的时候会把对象的类型首字母小写作为键
这里就是直接村的user这个对象,他的类型应该是User,这个时候,存进去的对象的键值为user(首字母小写)
User user = new User();
user.setUser_name("hello");
model.addAttribute(user);
- addAllAttributes(Map<String, ?> attributes);:往里面存一个map键值对,如果有相同的键,则原来的数据会被后添加的替换掉
- mergeAttributes(Map<String, ?> attributes);:功能同上,但是有相同的键的时候不会替换原来的
- addAllAttributes(Collection<?> attributeValues);往域中存放数据,数据数据的键为数据类型首字母小写作为key,如果有同类型的,会直接替换掉原来的值
- containsAttribute(String attributeName);判断Attributes中是否存在以某个字符串为键的值,存在为true,不才在为false
第三种:@SessionAttributes("name")
这个注解是贴到类上面的,他的作用是,将model中名为name的属性转存一份到session域中
这个注解也有两个属性
value:通过指定key将model数据放到session域当中
types:把指定类型的模型数据放到session域当中
@SessionAttributes(types = String.class)
例如这样,就把string类型的所有属性都存到了session中
第四种:@SessionAttribute("name")
与第三种不一样,第三种是往session存数据,而这个则是取数据,在那里取数据内,我们看下面
@RequestMapping("/modeltest2")
public String test12(Model model,@SessionAttribute("name") String name){
System.out.println(name+"这是从session取出来的");
return "resoult.jsp";
}
看,我们把这个注解放在了controller方法的形参的位置上,执行这个方法的时候,他就会判断session域中,是否存在一个key为name的属性,如果有,就会把他绑定到后面的name这个形参上。并且在这个方法中可以直接使用这个数据