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].属性