当Action设置了某个属性值后,struts2将这些属性值全部封在一个comopensymphonyxwork2utilValueStack类型的对像里,然后再将ValueStack对像以名称“strutsvalueStack”设置在request的请求属性里(requestsetAttribute("strutsvaluestack");),标签便可通过请求属性“strutsvalueStack”将action中设置的属性取出(orgapachestruts2viewsjspTagUtilsgetStack(PageContext pageContext))。详细内容可查看struts2标签源代码
request里的东西,都同时也放在了valueStack的顶层。
以前是request、response、context等这些是基本默认对象作为根值对象,在栈的顶层,你可以直接调用,比如request什么什么。
现在Sturts2,顶层换了。比如你的request里先前存了一个叫name的变量,那么OGNL中,你这样就可以:
<s:什么什么 %{name} /> 这样就取到值了。
如果是普通HTML标签,这样:
<input 什么什么 ${name} /> 这样取值。
我觉得它俩反过来就不好用,也不知道是不是我配置的问题。
那么假如你需要用request或response了,实际上调用:
ServletActionContextgetRequest();或
ServletActionContextgetResponse();
现在OGNL用井号#代替了上面,即#request就可以取到了。
又比如你自己<s:bean什么什么>一个对象addr出来,那么这个对象跟默认的那几个对象,即request、response等等是在一个层次上的,对于以前的jsp,是可以直接调用到的,但Struts2不行了。所以:
#addr
与
%{addr}或${addr}
是两个东西,后者是request里的,当然人为也可能让它们都指同一个东西。
把<s:iterator value="admins" id="admin" >
改成
<s:iterator value="%{admins}" id="admin" >
用struts2的标签,value用ognl表达式取值
然后取对象里面的属性
直接el表达式:
比如<s:property value="adminpasswrod"/>
改成${password} 他默认找栈顶元素 相当于${toppassword} 你试试看
至于为什么要加session
因为你代码里面
ActionContextgetContext()getSession()put("admins",admins);
这句就是把Admins 绑定到session上了,
这个session不是你服务器端原始的session了
是经过Struts2封装后的session对象,已经被封装成了MAP类型的session了
#session 就是在session里面找Key叫admins的值
以上就是关于javaweb struts2 中数据在request、action、valuestack的流向是什么全部的内容,包括:javaweb struts2 中数据在request、action、valuestack的流向是什么、关于struts2 <s:action />标签的使用问题、Struts2 jsp页面获取action传来的list值无法显示试过很多方法了。。等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)