valuestack的工作原理(转)

[size=medium][color=green]当访问一个action的时候,此时struts2会把整个action压入valuestack的顶部,此时valuestack就一个action对象

我们通常会写stack.set(key1,value1)或者statck.setvalue(key2,value2) 这两个是有区别的,前者会在valuestack压入一个hashmap,并将key1,value1植入该hashmap 那么此时valuestack会有两个对象,顶部是hashmap,底部是action 后者 会将key2,value2直接植入到顶部的对象,通常是action,如果action没有相应的set方法,那么执行这个方法等于白搭,你如果此时执行valuestack.findvalue就会为空

我们通常会在多个拦截器传递数据,正如前面所说,你必须得再action中写入set方法,否则无效,如果你不想写,那么请用valuestack.set,这样就不用改写action. 但又存在一个隐患,如果拦截器1中你写了valuestack.set,然后你在拦截器2中同findvalue获取了该值,这没有问题,假设你突然想在拦截器2中传一个值给action ,问题就暴露了,你会在拦截器2中像平常一样写statck.setvalue,然后在action 中加上 set,满以为可以传递过去,其实不行,因为此时栈顶是一个map,而非action,你此时是将值植入到map,而非action,所以传值失败。

valuestack作为拦截器、action,甚至页面传递数据的一个数据结构,特别是当栈中存在多个对象的时候,必须注意栈中对象的顺序以免产生一些恼人的问题。[/color][/size]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值