• ONGL表达式的用法


    什么是ognl?

    • OGNL是Struts2中使用的一种表达式语言。
    • 它可以用于在JSP页面,使用标签方便的访问各种对象的属性;
    • 它可以用于,在Action中获取传递过来的页面中的参数(并进行类型转换);
    • 它还可以用在struts2的配置文件中! 

     在OGNL的使用中,需要访问到一系列的对象,这些对象都存放在OGNL的context(上下文)中,context是一个Map结构,存放了一系列的key-value对,实际上,它和ActionContext类是相对应的。在OGNL的context中,有一个根对象为ValueStack,该对象实际上是一个栈,但在Struts 2框架中只存放了一个对象,就是action对象。在action中数据会被压入值栈中,那么在页面中就可以通过ongl表达式取出值栈中的值。

    (要了解值栈的概念可以看大佬的这篇 Struts2 | 深入浅出理解struts2中的值栈https://www.jianshu.com/p/82954b841b5e)  

    ognl表达式的使用

    ognl表达式要结合Struts的标签库来使用,主要有#、%和$三个符号的使用。

    1、#符号的三种用法

    1)访问非根元素(在struts中值栈为根对象),如ongl上下文和Action上下文,这里#相当于ActionContext.getContext()

    下表有几个ActionContext中有用的属性:

    属性 说明 表达式 表达式说明
    parameters 包含当前HTTP请求参数的Map #parameters.paramName[0] 相当于request.getParameter("paramName");
    request 包含当前HttpServletRequest的属性(attribute)的Map #request.key 相当于request.getAttribute(“key”)
    session 包含当前HttpSession的属性(attribute)的Map #session.key 相当于session.getAttribute(“key”)
    application 包含当前应用的ServletContext的属性(attribute)的Map #application.key 相当于application.getAttribute(“key”)

     注:attr 用于按request > session > application顺序访问其属性(attribute),#attr.key相当于按顺序在以上三个范围(scope)内读取key对应的属性值,直到找到为止。

     2)用于过滤和投影(projecting)集合,

    如: persons.{?#this.age>20}。

     

    3)用来构造Map,

    如下面的: #{’foo1′:’bar1′,’foo2′:’bar2′}。

     2、%符号

     %符号用于标志的属性为字符串类型时,计算ognl表达式的值,示例:

    <center>
        <s:set var="foobar" value="#{'foo1':'bar1', 'foo2':'bar2'}" />
        <p>The value of key "foo1" is <s:property value="#foobar['foo1']" /></p>
        <p>不使用%:<s:url value="#foobar['foo1']" /></p>
        <p>使用%:<s:url value="%{#foobar['foo1']}" /></p>
    </center>

      运行结果:

     3、$符号

     $符有两种用法:

    (1)在国际化资源文件中,引用OGNL表达式。

    (2)在Struts 2配置文件中,引用OGNL表达式:

    <action name=”saveUser” method=”save”>
        <result type=”redirect”>listUser.action?msg=${msg}</result>
    </action>
    
    
    <validators>
        <field name="intb">
                <field-validator type="int">
                <param name="min">10</param>
                <param name="max">100</param>
                <message>BAction-test校验:数字必须为${min}为${max}之间!</message>
            </field-validator>
        </field>
    </validators>

    需要注意的是:在Struts2的标签中不能用EL表达式,而可以用OGNL表达式。

  • 相关阅读:
    java fork/join简单实践
    java 中的字符串处理--正则表达式
    那些年,我们追过的java8
    openssl与java(读取加密码的密钥)
    SpringMVC 常用注解的使用和解释
    Spring 常用注解的使用
    java web 一次请求编码设置的过程
    Spring让程序生成程序
    设置session超时的三种方式
    为什么 cookie.getMaxAge() 总是得到 -1 ?
  • 原文地址:https://www.cnblogs.com/liuyiyuan/p/12666158.html
Copyright © 2020-2023  润新知