值栈、数据回显

1.一次session创建一个Action实例

2.valueStack依然有些生疏,导致有些时候数据回显搞了半天才反应过来

3.关于数据回显,翻看了以前的资料,由于资料存在缺陷我百度了一个比较符合我认知的答案:

数据回显

对于数据回显,必须要用struts标签!

例如下面这个标签有两种方式实现回显:

<span style="font-size:18px;"><td><s:textfield name="user.username"/></td></span></span></span>


1) 将user作为action的实例变量 

Action跳转时是这样的->

<span style="font-size:18px;">public class UserAction extends ActionSupport {
        private User user;
        ......

        public String editUI()
        {
            user = userService.findById(user.getId());
            return "editUI";
        }
    }</span>


2)如果user不是实例变量,要想完成数据回显,应该这样写:

<span style="font-size:18px;">public String editUI() {
        User user = new User();
        ActionContext ac = ActionContext.getContext();

        /************* 数据回显***************/
        // 获取值栈
        ValueStack vs = ac.getValueStack();
        vs.pop();// 移除栈顶元素
        vs.push(user);  // 入栈   
        // 进入修改页面
        return "editUI";
    }</span>


并且这时的标签可以简写为:

<span style="font-size:18px;"><s:textfield name="username"/></span>

能这样简写的原因我也翻看了一些资料:

OgnlValueStack类里有一个List类型的root变量,存放了一组对象,处于第一位的对象叫栈顶对象。
(list集合的 索引为0为栈顶)。通常我们在OGNL表达式里直接写上属性的名称即可访问root变量里对象
的属性,索顺序是从栈顶对象开始寻找,如果栈顶对象不存在该属性,就会从第二个对象寻找,
如果没有找到就从第三个对象寻找,依次往下访问,直到找到为止。

综上所述,要想完成数据回显,必须将要回显的对象放在ValueStack的根元素上。这样Ognl表达式才能取到值,实现回显。

觉得作者只是做了个总结,为了方便以后回过头看,上传一个有关valueStack的图表,方便理解


4.struts的iterator标签遍历元素时,会将正在遍历中的元素放入栈顶

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值