struts中的ognl表达式

来源:互联网 发布:政府数据开放平台 编辑:程序博客网 时间:2024/05/18 03:21

Ognl表达式语言

概述

OGNL表达式

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

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、操作集合对象。

总结

        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}"/>

原创粉丝点击