现在的位置: 首页 > 综合 > 正文

ognl表达式和struts2标签

2013年08月01日 ⁄ 综合 ⁄ 共 2744字 ⁄ 字号 评论关闭

值栈: 相当于一个栈,每个Action类的对象实例会拥有一个ValueStack对象,Struts
2
接收到一个.action的请求后,会先建立Action类的对象实例,先将Action类的相应属性放到 ValueStack对象的顶层节点,所有的属性值都是默认的值,如String类型的属性值为
null
int类型的属性值为0等。然后Struts 2就会调用拦截器链中的拦截器,当调用完所有的拦截器后,最后会调用Action类的Action方法,在调用Action方法之前,会将
ValueStack
对象顶层节点中的属性值赋给Action类中相应的属性.同理在返回结果时如果 Action中的属性改变,值栈中的相应属性也会改变.

 

Ognl:

 Struts2ActionContext设置为OGNL上下文,并将值栈作为OGNL的根对象放置到ActionContext,也就是说,ActionContext中的内容,通过ognl都可以访问,直接进入Ognl的使用:

Ognl获取值栈中的内容不用加#,获取值栈之外的内容要加#,

参考: Struts2中的OGNL详解http://www.cnblogs.com/xly1208/archive/2011/11/19/2255500.html

1.可以调用对象中的public修饰的属性或者getter方法,类似el表达式

  :obj.prop会先在查找obj中查找getProp()方法,找不到再找prop属性,如果还找不到就返回空字符串

2.调用对象中的方法直接使用obj.methdo(args): student.getName(); sudent.setName(“小红”);:方法返回void不显示

3.调用类中的静态属性和方法

使用@package.className@classProp或@package.className@staticMethod(args)

例如: @java.lang.Math@PI @util.DateUtil@formatDate(today,’yyyy-MM -dd’)

记住是在类的完整路径和方法名前加@类和方法之间没有” .”操作符如果写成@package.className.@staticProp就是错了

4.集合操作:

map.keymap[key]获取map中某key对应的value,  list[index]获取集合中下班为index的元素,set集合不能通过此方法获取第n个元素

{e1,e2,e3…}生成list对象  #{key1:value1,key2:value2,…}生成map对象

in表达式用来判断某个元素是否在指定的集合对象中

not in判断某个元素是否不在指定的集合对象中

?:获得所有符合逻辑的元素

^:获得符合逻辑的第一个元素。

$:获得符合逻辑的最后一个元素。

可参考http://book.51cto.com/art/200806/75772.htm

Java集合API中有一些常用的方法不符合JavaBeangettersetter的命名规范,因此不能像访问javaBean属性一样访问这些方法,OGNL提供了一些伪属性,使得可以像访问属性一样来调用这些方法列举如下:

ListSetMap: sizeisEmpty

List、Set: iterator

Map:keysvalues

Iterator:nexthasNext

Enumeration:nexthasNextnextElementhasMoreElements

可参:http://hi.baidu.com/sisovrcetggmqwr/item/9c96c9c08563731a515058db

5.支持构造方法 new pojo.Student(args)

6.可直接使用等号赋值

7.OGNL表达式在计算过程中会自动进行类型转换,不过要注意
%{‘hello’}
%{hello}的区别

 

Struts2标签:

Struts2相当于webwork的升级版,所以原来webwork的标签也在struts2中可直接使用

直接下载WebWork 2.0 Tags查看api

也可以参考http://www.roseindia.net/struts/struts2/index.shtml中的http://www.roseindia.net/struts/struts2/struts-2-tags.shtml

控制标签:

* if  * elseIf * else * append * generator * iterator * merge * sort * subset

if标签属性:test属性返回true或者false用来控制if标签中的html是否显示,id表示把test表达式的值放到上下文中(不在值栈中)便于其他地方访问

if可以单独使用可以可以和elseif,else等配合使用。

append用来把多个迭代器变成一个迭代器,使用这个迭代器时会依次调用里面的每个迭代器,一个迭代器结束,开始下一个迭代器。

merge表也用来把多个迭代器变成一个迭代器,使用这个迭代器时,先依次把每个迭代器的第一个元素取出来,再依次把每个迭代器中的第二个元素取出来,... 直到每个迭代器都结束。

generator表示把字符串分割开对外提供一个迭代器便于遍历,val提供用于分割的字符串,separator表示用什么分割字符串,id表示把提供的迭代器放到上下文中供其他地方使用,converter表示转换器,转换器要求是org.apache.struts2.util.IteratorGenerator.Converter的实现类的对象,用来处理分割后的每个字符串,转换成我们需要的格式或对象

sort根据我们提供的迭代器中的内容进行排序,再对外提供一个迭代器

subset根据我们提供的过滤器,进行过滤迭代器,再对处理后的数据对外提供迭代器

iterator 迭代  里面的status是org.apache.struts2.views.jsp.IteratorStatus对象

•index: current iteration index, starts on 0 and increments in one on every iteration
•count: iterations so far, starts on 1. count is always index + 1
•first: true if index == 0
•even: true if (index + 1) % 2 == 0
•last: true if current iteration is the last iteration
•odd: true if (index + 1) % 2 == 1

各个控制标签的属性列表如下:

 

 

 

 

 

抱歉!评论已关闭.