Struts的OGNL表达式

    xiaoxiao2021-03-25  112

    Ognl表达式语言

    概述

    l OGNL表达式

           OGNLObject Graphic Navigation Language(对象图导航语言)的缩写,它是一个开源项目。Struts2框架使用OGNL作为默认的表达式语言。

    l OGNL优势

          1、支持对象方法调用,如xxx.doSomeSpecial()

           2、支持类静态的方法调用和值访问,表达式的格式:

                 @[类全名(包括包路径)]@[方法名|  值名],例如:

                 @java.lang.String@format('foo %s', 'bar')

                 @tutorial.MyConstant@APP_NAME

           3、支持赋值操作和表达式串联,如price=100, discount=0.8,

                 calculatePrice(),这个表达式会返回80

           4、访问OGNL上下文(OGNL context)和ActionContext

           5、操作集合对象。

    l 总结

            OGNL 有一个上下文(Context)概念,说白了上下文就是一个MAP结构,它实现了  java.utils.Map 的接口。 OgnlContext对象

     

     

    分析:

    ü Struts框架默认就支持Ognl表达式语言。

    (struts必须引用的包:ognl.jar)

    ü 作用

    页面取值用。

     

    El表达式语言,用于页面取值,jsp页面取值的标准。(默认直接可以使用)

    (应用范围更广。)

    Ognl表达式语言, struts标签默认支持的表达式语言。

       必须配置struts标签用,不能离开struts标签直接用。

    OGNL表达式之#

    #号的作用

    #号主要用于访问访问Map栈信息,不使用#号主要用于访问List(对象栈)信息。

     

    举例

          <s:property value="#request.username"/>

          <s:property value="#request.userpsw"/>

          <s:property value="address"/>    // 获取对象栈信息(默认从栈顶检索)

          Struts2property 标签中value属性值会特意的将其中的值以OGNL表达式的方式进行运行。

     

     

    OGNL表达式之对象栈检索顺序

     

    对象栈中添加对象

          1、给Action添加namepsw属性

          2、创建一个User指定namepsw属性

          3、创建一个Student指定namepsw属性  

                 分别将UserStuden存储到对象栈中

    分析

           name = <s:property value="name"/>

           psw = <s:property value="psw"/>

            一定是从栈顶开始查询,一旦找到就显示。没有找到依次遍历对象栈的所有属性。

     

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

     

    OGNL表达式之$

     

    $号的作用

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

          Struts2配置文件中,引用OGNL表达式

    举例

          ognl.xml配置文件

           <action name="ognlAction_*" class="cn.itcast.ognl.OgnlAction" method="{1}">

                  <result name="success">/ognl/ognl.jsp?username=${#request.username}</result>

           </action>

           ognl.jsp中获取携带的参数:

           <s:property value="%{#parameters.username[0]}"/>

     

    OGNL表达式之%

    %号的作用

          “%”符号的作用是在当Struts2标签的属性值为OGNL表达式时OGNL表达式却被理解为字符串类型原样输出时,用于通知执行环境%{}里的是OGNL表达式。

    举例

          Struts2中的textfield标签主要用于在页面中显示一个文本输入框数据。类似input

          <s:textfield value="#request.username"></s:textfield>

          此时#request.username被理解为一个普通的字符串,因此直接显示。因为这里脱离了

          运行OGNL的环境即:<s:property value="OGNL表达式"/>环境。

          通知运行环境将#request.usernameOGNL表达式运行:

          <s:textfield value="%{#request.username}"></s:textfield>

    总结

           为了方便使用%{}我们可以在任何地方都直接添加%{}来确保运行OGNL表达式:

           <s:property value="%{#request.username}"/>

     

     

    转载请注明原文地址: https://ju.6miu.com/read-24857.html

    最新回复(0)