Struts2框架(3)

1.OGNL表达式

        (1)OGNL的概述

                      1)OGNL:对象图导航语言,是一门功能强大的表达式语言。

2.OGNL的功能

        (1)调用对象的方法

        (2)调用对象的静态方法

        (3)表达式串联

        (4)访问ActionContext和OgnlContext数据

3.OGNL独立的表达式:

(1)Java环境下入门

(2)Struts2环境下入门

4.值栈

        (1)值栈的概述

                     1)ValueStack:是一个接口,实现类OgnlValueStack。是数据的中转站,

                            贯穿了整个Action,有一个Action的实例,就会创建一个ValueStack对象。

        (2)值栈的内部结构

                     1)Root          :CompoundRoot,就是一个ArrayList。

                     2)Context    :OgnlContext,就是一个Map。

        (3)ActionContext和值栈关系

                     1)ActionContext获得值栈的引用。

        (4)获得值栈

                     1)通过ActionContext获取

                     2)通过request获取

        (5)操作值栈

                     1)利用Action本身在栈中的特点,Action中的属性。

                     2)手动操作值栈:

        (6)获取值栈的数据

                     1)OGNL获取:<s:property value=”…”/>

        (7)EL获取值栈的数据

                     1)底层增强request.getAttribute(“”);

5.ONGL特殊字符

        (1)#号

                     1)获取context数据

                     2)构建map集合

        (2)%号

                     1)强制解析OGNL

        (3)$号

                     1)在配置文件中使用OGNL

1.OGNL表达式

(1)OGNL的概述

  • OGNL是Object Graphic Navigation Language(对象图导航语言)的缩写,
  • 它是一个单独的开源项目。 Struts2框架使用OGNL作为默认的表达式语言。
  • OGNL是struts2整合的一个开源项目,所以在struts2中,要想使用OGNL表达式,必须使用Struts2标签库

                     

  • OGNL相当 于EL表示式,从作用域取数据

1)OGNL:对象图导航语言,是一门功能强大的表达式语言。

2.OGNL的功能(这是在java环境下的使用)

        (1)调用对象的方法

        (2)调用对象的静态方法

        (3)表达式串联

        (4)访问ActionContext和OgnlContext数据

3.OGNL独立的表达式

(1)Java环境下入门(第二部分的代码)

(2)Struts2环境下入门

  • 默认OGNL是禁止静态方法访问的,在default.properties中有个struts.ognl.allowStaticMethodAccess=false,如想使用,需要在struts.xml文件中配置允许访问静态方法

4.值栈

(1)值栈的概述

ognl表达式存放数据的地方

1)ValueStack:是一个接口,实现类OgnlValueStack。是数据的中转站,贯穿了整个Action,有一个Action的实例,就会创建一个ValueStack对象。

(2)值栈的内部结构

root根:List

元素1

元素2

元素3

元素4

元素5

 

contextMap:Map

key

value

application

Map

session

Map

request

Map

attr

Map

 

 

1)Root         :CompoundRoot,就是一个ArrayList。

2)Context    :OgnlContext,就是一个Map。

(3)ActionContext和值栈关系

1)ActionContext获得值栈的引用。

(4)获得值栈(3种)

1)通过ActionContext获取

2)通过request获取

3)通过struts.valueStack获得

(5)操作值栈--向值栈中存数据

1)利用Action本身在栈中的特点,Action中的属性。

这里是存在了root区域

2)手动操作值栈:使用ValueStack中本身的方法

setValue方法

set方法:掌握压栈的顺序问题

这里的[0]和[1]表示的是push放进去同样名称username的先后顺序

findValue方法

          在jsp页面上的调用的都是findValue方法

(6)获取值栈的数据

获取值栈中的数据就是在页面使用OGNL表达式即可

 1)OGNL获取:<s:property value=”…”/>

获取root的数据,不需要加#,如果是获取context数据就需要加

 (7)EL获取值栈的数据

因为Struts2的框架的底层增强request.getAttribute(“”);

5.ONGL特殊字符

(1)#号

1)获取context数据

取contextMap中key时使用,例如<s:property value="#name" />

 2)构建map集合

OGNL中创建Map对象时使用,例如:<s:radio list="#{'male':'男','female':'女'}" />

这里如果使用了var = “  ”的话,这份数据除了在root中有,也会在context中备份,如果没有var的话就只会在root中

在页面中得到的结果:

这两种的区别就是第一个的list的值是一个集合,而下面的list的值是一个map的集合,这是看value的值和外面的值是否相同决定的。使用list集合的时候使不用加#的,使用map集合的话就需要加一个#

(2)%号

  1)强制解析OGNL

在struts2中,有些标签的value属性取值就是一个OGNL表达式,例如<s:property value="OGNL Expression" />

还有一部分标签,value属性的取值就是普通字符串,例如<s:textfield value="username"/>,如果想把一个普通的字符串强制看成时OGNL,就需要使用%{}把字符串套起来。

例如<s:textfield value="%{username}"/>。

当然在<s:property value="%{OGNL Expression}" />也可以使用,但不会这么用。

(3)$号

 1)在配置文件中使用OGNL

a、在JSP中使用EL表达式时使用,例如${name}

b、在xml配置文件中,编写OGNL表达式时使用,例如文件下载时,文件名编码。

struts.xml——>${@java.net.URLEncoder.encode(filename)},如果没有加上${}的话就相当于一个普通的字符

猜你喜欢

转载自blog.csdn.net/WinnerBear/article/details/88370452