ognl:对象图导航语言

使用Domain model模型时:

1:模型中必须包含一个空参数的构造函数,以便系统调用创建模型对象,这时必须传递参数


2:当然也可以自己new 一个对象出来,如果不提供参数使用默认值,如果提供了参数则使用提供的参数


访问属性:无论字段是什么类型的:通过 对象.属性 的形式访问,返回该属性的值,类型为属性的自身类型,如果属性是一个类的对象,可以继续通过 . 访问该对象的值例如:<s:property value="cat.dog.name" />

访问普通(非静态的)属性对应类型的方法:和原来 java调用系统方法相同 :example:<s:property value="cat.name.length(()" />

访问对象的普通(非静态方法):和原来调用java类的方法 相同:example:<s:property value="cat.doWork()" />方法只要是非静态即可,没有其它限定

访问值栈中action的普通方法:直接写方法名:example:<s:property value="m()" />方法只要是非静态的即可,没有其它的要求


访问静态方法:@类名@静态方法   必须带上包名,必须是public 的

访问静态属性:@类名@静态属性    必须带上包名,必须是public 的

访问Math类的静态方法:@@方法

(在struts2.0时可以直接获取结果,struts2.1时做了改动,要想访问静态方法必须在struts.xml中配置<constant name="struts.ognl.allowStaticMethodAccess" value="true" />默认情况value=false


访问容器:

访问list

<s:property value="容器名" />获取整个list

<s:property value="容器名[index]" />获取某个元素

<s:property value="容器名.{属性名}" />获取list元素属性集合(  如果容器中存储的是对象)

<s:property value="容器名[index].属性名" />获取list特定元素的属性值

 访问set

<s:property value="容器名" />获取整个 set 

set是无序的因此不可以通过索引获取某个元素的值

 访问map

<s:property value="容器名" />

<s:property value="容器名.键名" />获取某个值

 <s:property value="容器名.keys" />获取map的键集合

 <s:property value="容器名.values" />获取map 的值集合


访问容器大小:调用 size()方法


过滤:?#表示过滤条件,^#表示匹配的第一个  $#表示匹配的最后一个

examples:

<s:property value="容器名.{?#this.age==1}.[0]" /> this 表示遍历容器时所对应的对象,改句表示获取age 等于一的对象

<s:property value="容器名 .{^#this.age>1}.{age}" />获取第一个age大于一的age值集合

<s:property value="容器名.{$#this.age>1}.{age}" />获取最后一个age大于1的值得集合

<s:property value="容器名.{$#this.age>1}.{age}==null" />判断是否有age大于1


使用[]访问:

 所有被访问到aciton都会被放到值栈中,[0]表示从第一个action开始搜索,当访问值栈中的某个元素时使用[0].属性