第一种:使用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这个形参上。并且在这个方法中可以直接使用这个数据