【OA】——Struts2 标签库和 OGNL表达式 使用小结

原创 2016年08月28日 20:07:53

Struts2标签库:

OGNL

Struts2标签分类

控制标签 :(if, elseif,else, iterator, append, merge, generator, subset, sort)

数据标签 :(bean, param,date, debug, include, set, url, push)



OGNL概念:


Object-Graph Navigation Language

一种功能强大的表达式语言

任意存取对象的属性或者调用对象的方法


OGNL相关:


1.OGNL表达式的计算是围绕OGNL上下文进行的。

OGNL上下文实际上就是一个Map对象,由ognl.OgnlContext类表示。它里面可以存放很多个JavaBean对象。它有一个上下文根对象。

上下文中的根对象可以直接使用名来访问或直接使用它的属性名访问它的属性值。否则要加前缀“#key”。

2.Struts2的标签库都是使用OGNL表达式来访问ActionContext中的对象数据的。如:<s:propertyvalue="xxx"/>。

3.Struts2将ActionContext设置为OGNL上下文,并将值栈作为OGNL的根对象放置到ActionContext中。

4.值栈(ValueStack) :

Struts 2中值栈被视为根对象,可以在值栈中放入、删除、查询对象。访问值栈中的对象不用“#”。

Struts2总是把当前Action实例放置在栈顶。所以在OGNL中引用Action中的属性也可以省略“#”。

5.调用ActionContext的put(key,value)放入的数据,需要使用#访问。


OGNL符号:


1.#符号


#符号的用途一般有三种。

—    访问非根对象属性,例如#session.msg表达式,由于Struts 2中值栈被视为根对象,所以访问其他非根对象时,需要加#前缀。实际上,#相当于ActionContext. getContext();#session.msg表达式相当于ActionContext.getContext().getSession(). getAttribute("msg") 。

—    用于过滤和投影(projecting)集合,如persons.{?#this.age>25},persons.{?#this.name=='pla1'}.{age}[0]。

—    用来构造Map,例如示例中的#{'foo1':'bar1', 'foo2':'bar2'}。

2.%符号

%符号的用途是在标志的属性为字符串类型时,计算OGNL表达式的值,这个类似js中的eval,很暴力。

3.$符号

取值,必须跟标签的name属性一致。

<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> 


使用方法:


访问属性


名字属性获取:<s:property value="user.username"/><br>

地址属性获取:<s:property value="user.address.addr"/><br>


访问方法


调用值栈中对象的普通方法:<s:property value="user.get()"/><br>



访问静态属性和方法


调用Action中的静态方法:<s:property value="@struts.action.LoginAction@get()"/>

调用JDK中的类的静态方法:<s:property value="@java.lang.Math@floor(44.56)"/><br>

调用JDK中的类的静态方法(同上):<s:property value="@@floor(44.56)"/><br>

调用JDK中的类的静态方法:<s:property value="@java.util.Calendar@getInstance()"/><br>

调用普通类中的静态属性:<s:property value="@struts.vo.Address@TIPS"/><br>


访问构造方法


调用普通类的构造方法:<s:property value="new struts.vo.Student('李晓红' , '美女' , 3 , 25).username"/>


访问数组


获取List:<s:property value="testList"/><br>

获取List中的某一个元素(可以使用类似于数组中的下标获取List中的内容):

<s:property value="testList[0]"/><br>

获取Set:<s:property value="testSet"/><br>

获取Set中的某一个元素(Set由于没有顺序,所以不能使用下标获取数据):

<s:property value="testSet[0]"/><br> 

获取Map:<s:property value="testMap"/><br>

获取Map中所有的键:<s:property value="testMap.keys"/><br>

获取Map中所有的值:<s:property value="testMap.values"/><br>

获取Map中的某一个元素(可以使用类似于数组中的下标获取List中的内容):

<s:property value="testMap['m1']"/><br>

获取List的大小:<s:property value="testSet.size"/><br>

 


名称

作用

示例:

parameters 

读取请求参数

<s:property value="#parameters.id"/>

request 

读取request中的属性:

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

session 

读取session中的属性:

<s:property value="#session.s"/>

application 

读取application中的属性:

<s:property value="#application.a"/>

attr

request > session > application顺序访问其属性:

<s:property value="#attr.pc"/>

范例:

<s:iterator value="#{'china':'中国','usa':'美国','e':'俄国'}" var="c">
<s:property value="#c.key"/>--<s:propertyvalue="#c.value"/><br/>
</s:iterator>

 

总结


       OGNL是标签的基础,之前JSP使用EL,后来推出的struts2中使OGNL和标签的结合使用更加的方便了。标签的循环遍历是我们经常用到的,知识随时总结,才能看清楚之间的联系。





版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Struts2标签库(1):OGNL表达式语言

Struts2利用内建的OGNL(Obejct Graph Navigation Language)表达式语言的支持,大大加强了Struts2的数据访问功能,XWork在原有的OGNL基础上,增加了对...

Struts2标签库汇总和OGNL表达式语言

Struts2标签分类 UI标签:主要用于生成HTML元素的标签 非UI标签:主要用于数据访问、逻辑控制的标签 Ajax标签:用于支持Ajax的标签 表单标签(属于UI标签):用于生成HTML页面的f...

Struts2标签、Ognl表达式、el表达式、jstl标签库这四者之间的关系与各自使用

转载自:http://blog.csdn.net/love_you_99/article/details/8184797 我之前虽然会用,但是一直分不清彼此之间有什么区别,所以查找资料,将它们进...

Struts2学习总结(3)--值栈,Ognl表达式,Struts标签库,国际化,数据校验,拦截器

本文包括以下五个部分: 1. 值栈。 2. Ognl表达式。 3. struts2标签库。 4. 国际化。 5. 表单数据校验 6. 拦截器。 ...

Struts2中的OGNL详解(和标签库一起使用)

首先了解下OGNL的概念: OGNL是Object-Graph Navigation Language的缩写,全称为对象图导航语言,是一种功能强大的表达式语言,它通过简单一致的语法,可以任意存取...

Struts2标签库和OGNL

学习内容 Struts 2标签库 OGNL能力目标 熟练使用Struts 2常用标签 熟练使用OGNL 本章简介前面我们编写的案例使用的都是HTML标签,这些标签并不能很好的与Struts 2框架结合...

Struts2标签库 + OGNL

OGNL( object graph navigation Language对象图导航语言) 和Struts 的标签库

SSH实战OA 04:Struts2的OGNL表达式

最近来不及更新博客,博客内容可能要跳过系统管理模块,后面再来补写,不过我相信很快就会把系统管理这个模块的博客补上的。最近在做权限管理模块的时候发现用el/jstl表达式做回显和数据提交的时候遇到一些无...

Struts2之OGNL表达式与值栈对象及常用标签的使用

一,概述 OGNL表达式 OGNL是Object Graphic Navigation Language(对象图导航语言)的缩写,它是一个开源项目.Struts2使用OGNL作为默认的表达式语...
  • bighuan
  • bighuan
  • 2017年05月13日 17:20
  • 110

Struts2学习——(六)值栈与OGNL表达式[结合struts标签]

一、ValueStack(值栈): 贯穿整个Action周期,每一个Action类的对象实例都有一个ValueStack对象,相当于一个数据的中转站,在其中保存当前Action对象和其它相关对象。 ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【OA】——Struts2 标签库和 OGNL表达式 使用小结
举报原因:
原因补充:

(最多只允许输入30个字)