struts2的值栈

这里通过s:debug发现会将,每个遍历的对象放入valuestack一份和contextMap中一份。放入contextMap的好理解,但是放入valueStack的是... 这里通过s:debug发现会将,每个遍历的对象放入valuestack一份和contextMap中一份。放入contextMap的好理解,但是放入valueStack的是一个string类型的对象,为什么通过iiii可以取到数据?string对象上又没有getIIII()方法 展开
 我来答
陈亮424
2016-08-22 · TA获得超过634个赞
知道小有建树答主
回答量:626
采纳率:0%
帮助的人:417万
展开全部
1、对于valuestack你的理解稍有点错误,valuestack内部组成可以分为两个部分,一部分叫做对象栈(root区),一部分叫做Map栈(map区)。对于每个action请求 ,root区压入栈的是当前action实例相关的对象,map区压入的各种map,比如:requestMap、sessionMap....

2、再说一下你贴出来的代码,自定一个集合,然后用s:iterator标签遍历,s:debug标签在页面展开你会发现变量iiii=aa被压入的不是root区,而是map区。而struts2通过s:property标签和ognl从valuestack中取值的顺序是先从root区开始找,如果找不到再从map区找。

3、所以其实页面遍历出来的aa 、bb、cc其实最终还是从request域中取出来的

4、综上所述,如果用<s:property value="iiii">这种形式取值是由弊端的,如果此时root区也压入了一个变量叫iiii的话,那么此时取到的值就是后台传过来的值,而不是aa、bb、cc
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式