当前位置: 代码迷 >> Java Web开发 >> request.setAttribute(String str,Object obj),obj这个参数的有关问题
  详细解决方案

request.setAttribute(String str,Object obj),obj这个参数的有关问题

热度:705   发布时间:2016-04-17 12:48:06.0
request.setAttribute(String str,Object obj),obj这个参数的问题
request.setAttribute(String str,Object obj);
看上面的参数
如果我是查询列表页面
那么我要把DAO层的LIST的放进去

问1:是把list替换掉obj吗?
问2:那个obj应该是List类型了是吧,因为我要把list放进去
问3:request.setAttribute("list",list); //这个list不就是一个List类型吗?参数为什么要是Object类型呢
问4:在3的基础上,如果在JSP页面上取值,Object obj = request.getAttribute("list"); List l = (List)obj;为什么还要强制转换呢,SET的时候就是一个List,取出来直接用不就行了吗?

------解决方案--------------------
答1和2.list是Object的子类,所以无需替换,参数传递是list类型自动转化为object
答3.request.setAttribute这是一个通用方法,如果list,array等等类型都要分别定义一个方法,你说合适吗?
答4.参数传递是list类型自动转化为object,所以在拿值的时候还需要将它再转型过来
------解决方案--------------------
楼主好好看看API

这是类间上传与下传值得问题。
------解决方案--------------------
request.setAttribute(String str,Object obj); 

是因为在设计此API的时候,根本不知道你放什么东西到request中,所以用Object作为参数也就是所有对象都可以放进去


request.getAttribute是因为设计API,在编译代码的时候Java并不知道它实际返回的会是什么,所以统一使用Object。



难道我在二行代码中,
request.getAttribute("Str");返回的是一个String,
request.getAttribute("User")返回的是一个User对象,
request.getAttribute("list")返回的是一个List对象?

Java是一个严谨的语言,不同于JavaScript这种宽松的语言,它根本在编译时明确指定它的
  相关解决方案