javaweb struts2 中数据在request、action、valuestack的流向是什么

javaweb struts2 中数据在request、action、valuestack的流向是什么,第1张

当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值无法显示试过很多方法了。。等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/9547699.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-29
下一篇 2023-04-29

发表评论

登录后才能评论

评论列表(0条)

保存