ognl表达式的使用和值栈

问题七:为什么el表达式可以访问valueStack?
struts框架中所使用的request对象,是增强后的request
${username}—–>request.getAttribute(“username”);
增强后的request,会首先在request域中查找,还会在valueStack中查找。
StrutsPreparedAndExecuteFilter的doFilter代码中 request = prepare.wrapRequest(request);
* 对Request对象进行了包装 ,StrutsRequestWrapper
* 重写request的 getAttribute
Object attribute = super.getAttribute(s);
if (attribute == null) {
attribute = stack.findValue(s);
}
访问request范围的数据时,如果数据找不到,去值栈中找
request对象 具备访问值栈数据的能力 (查找root的数据)

OGNL表达式的常见使用:$ % #
1.#号

代表ActionContext.getContext ()上下文


用法二 : 不写# 默认在 值栈中root中进行查找
在root中查找name属性
* 查询元素时,从root的栈顶元素 开始查找, 如果访问指定栈中元素
访问栈中第二个元素name属性
* 访问第二个元素对象
用法三:进行投影映射(结合复杂对象的遍历)
就是把某一部分拿出来,
2.对集合进行投影,只得到设定的属性



2)遍历时,对数据设置条件

遍历集合只要price大于1500商品


1500}” var=”product”>


3)综合

只显示价格大于1500 商品名称


1500}.{name}” var=”pname”>


这里写图片描述
2.%号
%作用:就是用于设定当前是否要解析其为 ognl表达式.

        %{表达式}  当前表达式会被做为ognl解析.
        %{'表达式'} 当前表达式不会被做为ognl解析。

        <s:property value="表达式"> 对于s:property标签,它的value属性会被默认做为ognl.

        以后,所有表达式如果想要让其是ognl  %{表达式}

3. 作用:就是在配置文件中使用ognl表达式来获取valueStack中数据.

        1.struts.xml
            <result type="stream">
                <param name="contentType">${contentType}</param>
            </result>

        2.在校验文件中使用
            ${min}  ${max}
            ${minLength} ${maxLength}

        3.在国际化文件中使用

            在properties文件中
                username=${#request.username}
            在jsp页面
                <s:text name="username">

    -----------------------------------------------------------------
    总结: #就是用于获取数据  %就是用于设置是否是ognl表达式  $就是在配置文件中使用ognl.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值