4. Struts2框架之 ValueStack

本文详细介绍了Struts2框架中的ValueStack值栈概念及其应用。包括值栈的基本结构、如何获取及使用值栈、向值栈存取数据的方法、通过Struts2标签和Ognl表达式获取值栈中的数据等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ValueStack 值栈(功能类似于域对象,存取值)

1. 每一个action 都有且仅有一个值栈,可在action中存值,jsp中取值
2. **获取值栈**:
    **先得到   ActionContext,然后再 getValueStack();** 

3. 内部结构分为2部分:
    1. root  结构是list集合(常用)
    2. context  map集合

            map集合中的key都是固定值,value放的都是对象的引用值
            key有:Request,session,application,parameters,attr
            value: Request,session,ServletContext,传递参数,获取域对象中的值(优先获取最小范围的域)

4. 使用struts2 标签 <s:debug> 查看值栈结构(在action返回值配置的jsp中设置)
    **1. 在action中没有做任何操作,栈顶元素就是该action的引用**

5. 向值栈中 **存放** 数据方式:
    1. 获取值栈对象,调用值栈的set(String name,String value)方法, 值栈会生成一个HashMap对象存这个数据,然后再将hashmap引用放入值栈的list集合中
    2. 获取值栈对象,调用值栈的push(Object value)方法,然后生成该对象的引用放入值栈的list集合中
    3. **在action中定义变量/声明对象并new,生成变量/对象的get()方法**
        这样就把这个数据存到了action里面,减少了空间浪费

6. 从值栈中** 获取数据**  

        在jsp中使用Ognl+Struts2标签 获取数据 
        <s:property value="username"/>
        到action中找到名称一致的属性(username),然后调用该属性的get方法,就得到了

        对象的值获取:
        <s:property value="user.username"/>
        先到action中找到对象(user)的get方法,然后再调用对象里面的属性(username)的get方法,来获取到值

        List集合数据  <s:property value = list[0].username /> list中的第一个对象
                     <s:property value = list[1].username /> list中的第二个对象

        或者配合struts标签  <s:iterator value="list">
                            <s:property value="username">
                          </s:iterator>
        就是先获取到list集合,遍历,每次都得到了user对象,所以直接取值username就可以了

7. EL表达式+Jstl标签,也可以做到 在jsp中获取值栈数据(性能低,不建议)

    >原因:底层增强了request.getAttribute()方法,如果从request域中无法取到值,那就从值栈中取值,把值栈的值放到request域中,这样EL表达式就可以取出来了



8. Ognl表达式与struts 标签
    1. ognl 的 # 使用: 通常用于取 值栈中context里的值

    >context里主要就是域对象(request,session,servletContext),也就是说取 域对象的值,需要加上# 符号

    2. 在struts**表单** 标签中 需要 在ognl表达式前 使用 $ , 否则 无法识别ognl表达式
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值