(总结)struts2中 值栈,action属性,request属性,session属性 设置域获取
可在多个地方设置属性,action域,request属性,session属性等。
action自带属性或者action中有getUser()之类方法即可认为action带有属性;
获取到request之后,即可进行属性设置,如下图所示:
获取到session之后,即可进行属性设置,如下图所示:
后台设置好属性后,前台即可获取,可用struts2标签获取,也可用普通标签获取,也可在jsp页面的内嵌JS代码中获取,下面分别介绍。
后台普通返回属性时(不设为json时),用struts2标签获取后台属性:
1.获取action属性
<s:property value="name"/> //这个只能获取action的默认属性
<s:property value="student.getName()"/> //这个只能获取action对象域的某个属性值
2.获取reqeust属性
<s:property value="#reqeust.name"/> //这个只能获取request中设置的属性
<s:property value="#request.student.getName()"/> m//这个只能获取request域对象的某个属性值
3.获取session属性
<s:property value="#session.name"/> //这个只能获取session中设置的属性
<s:property value="#session.student.getName()"/> //这个只能获取session域对象的某个属性值
后台普通返回属性时(设为json时),用struts2标签获取后台属性:
获取基本类型的属性值和不设为json时一致,但不能获取到域对象的内容值
原来的对象数据已经json化了,那些方法已经不存在了,所以只能获取基本类型的数据
后台普通返回属性时(不设为json时),普通HTML标签获取属性
1.获取action属性
<input type="text" value="${name}"/ > //这个可以获取action的默认属性
<input type="text" value="${student.getName()}"/> //这个可以获取action对象域的某个属性值
上述两个input标签均能获取到action中的属性值,但是也可以获取到request和session中设置的属性值,优先级时 request属性 > action属性 > session属性
2.获取reqeust属性
<input type="text" value="${request.name}"/ > //这个只能获取request中设置的属性
<input type="text" value="${request.student.getName()}"/> //这个只能获取request域对象的某个属性值
3.获取session属性
<input type="text" value="${session.name}"/ > //这个只能获取session中设置的属性
<input type="text" value="${session.student.getName()}"/> //这个只能获取session域对象的某个属性值
后台普通返回属性时(不设为json时),普通HTML标签获取属性
获取基本类型的属性值和不设为json时一致,但不能获取到域对象的内容值
原来的对象数据已经json化了,getter方法已经不存在了,所以不能再获取对象数据的域值了
后台普通返回属性时(不设为json时),JSP页面的内嵌JS代码获取属性
普通类型属性获取
1.获取action属性
'${name}'
2.获取request属性
'${request.name}'
或者
'${name}'
3.获取session睡醒
'${name}'
或者
'${session.name}'
类对象获取
这种情况下,返回来的对象时hash吗?
需要将后台的类对象json化,才能在前天正常使用
后台普通返回属性时(设为json时),JSP页面的内嵌JS代码获取属性
普通类型属性获取
1.获取action属性
'${name}' //这个既能获取到aciton的属性,也可以获取到request或者session中的属性值,优先级顺序为: request属性 > action属性>session属性
2.获取request属性
'${request.name}'
或者
'${name}'
3.获取session属性
'${name}'
或者
'${session.name}'
和不设为json格式的使用方式一样。
类型对象属性获取
${student}.name //因为json格式化后,原来的对象实际上已经不存在了,不能在调用属性获取方法了,只支持 . 运算符。
同理,这儿既可以获取到action的域对象,也可以获取到request的域对象,还可以获取到session的域对象,依然有优先级,优先级顺序为: request属性 > action属性>session属性
${session.data}.student.datas[0].dataId //获取json串的某个对象student的属性datas数组(或列表)的第一个元素的dataId域值
综上:action、request和session中的基本类型的属性值,在普通HTML标签,struts2特有标签和JSP页面内嵌JS代码中均可以比较完美地获取(JSP内嵌JS代码获取字符串需要加一个 '');
action、request和session中的对象域JSON化后,普通HTML标签和struts2标签中的<s:property value="">不能获取对象域属性值,但是JSP内嵌JS代码可以很好地处理返回的json字符串。
一个比较笨的能够在JSP页面的内嵌JS代码 和 struts2 的property 共同使用时,可以设置不同名称的对象,一个是正常格式的对象数据,另一个是JSON格式化的对象数据(json化后,方法就不存在了,就成为了一个指定格式的字符串)