对Session.getAttribute(),Request.setAttribute()和ModelMap.addAttribute()用法的理解

1.ModelMap对象主要用于传递控制方法处理数据到结果页面,也就是说我们把结果页面上需要的数据放到ModelMap对象中即可,他的作用类似于request对象的setAttribute方法的作用,用来在一个请求过程中传递处理的数据。通过以下方法向页面传递参数:  addAttribute(String key,Object value);  说白了就是ModelMap、Model、ModelAndView用于在控制器中放置数据到request中,以便转发给视图jsp好通过request.getAttribute取得。  

2.ModelMap的实例是由mvc框架自动创建并作为控制器方法参数传入,用户无需自己创建。ModelAndView的实例是由用户手动创建的,这也是和ModelMap的一个区别。  说白了就是ModelMap需要在参数中声明由springmvc传入,视图名通过return 返回,ModelAndView需要在方法体中自己new,new的同时构造函数参数要指定视图名。添加数据这两个用法是一样的。model和modelmap会自动转成modeladnview。  

3.public String test1(@ModelAttribute("user") UserModel user)。如请求参数包含“?username=zhangsan&password=123456&workInfo.city=wh”自动绑定到user 中的workInfo属性的city属性中  说白了如果不加@ModelAttribute修饰参数,那么只是简单的自动将请求的数据按属性名绑定到user对象里,加了的话就可以在绑定参数数据的同时自动以user属性名添加到model里。更省事了。要不然还得手动写上 model.addAttribute("user",user); 当然还有可能先对user进行进一步的数据加工后再addAttribute("user") 。   

4.session.setAttribute()和session.getAttribute()配对使用,作用域是整个会话期间,在所有的页面都使用这些数据的时候使用。request.setAttribute()和request.getAttribute()配对使用,作用域是请求和被请求页面之间。

5.@SessionAttributes  作用于Controller类,让Controller所有方法共享Model对象中一个或多个属性  再解释明白一点:就是原来model中有一个属性testId,现在在Controller上添加注解@SessionAttributes(“testId”),则所有方法都可以通过model获取该testId属性值。

 

关于session,request,modelMap取值顺序:

Model model,HttpServletRequest request, ModelMap map声明变量 request.getSession().setAttribute("test", "haiwei2Session");

request.setAttribute("test", "haiwei1request");  

map.addAttribute("test", "haiweiModelMap");

model.addAttribute("test", "haiweiModel");  

我通过${test}这个方式取值,优先取Model和ModelMap的,Model和ModelMap是同一个东西,谁最后赋值的就取谁的,然后是request,最后是从session中获取。

转载于:https://my.oschina.net/u/3855568/blog/1814051

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值