ognl ——Object-Graph Navigation Language 对象
对象图导航语言
是Struts2默认的表达式语言,开源,功能更强大
1)存取对象的属性,调用对象的方法,访问静态方法和属性
2)访问值栈(value Stack)和堆栈(Stack Context)
3)操作集合对象
4)支持赋值,运算操作,字段类型转化等
值栈(value Stack)在action中必须封装get/set方法
<s:property value="stu.name"/> (对象名.属性名)
在内存空间中存放数据
堆栈 Stack Context :
<s:property value="#request.name"/> (通过#来访问堆栈中的数据)
request、session、application、parameters等的值一般存放在堆栈中。
其中#attr 为在所有的属性范围中获取值,依次搜索request > session > application。
ognl中,进行List构造方法:{1,2,3}[0] —— 笔记上的,不知道是否正确??
直接构造Map:
#{'first':'zhangsan','second':'lisi'}
#{'first':'zhangsan','second':'lisi'}['first']
#{'first':'zhangsan','second':'lisi'}.first
ognl
1)访问List集合:(像数组一样进行访问) 属性名[0]
访问方法:属性名.方法名()
2)访问Map
map.put("a1",new Student("x","a"));
<s:property value="map['a1']" /> 打印student对象
<s:property value="map.get('a1')" />
<s:property value="map.a1" />
3)访问Set:
TreeSet<> set = new TreeSet<>(); (有序二叉树) ——>只能用iteartor()进行遍历
set.add(new Student("boy","F")); ——实体类,要实现Comparble接口 必重写compare 方法
<s:property value="set.toArray()[0]" />
4)访问静态方法和属性
需于struts.xml中设置
<constant name="struts.ognl.allowStaticMethodAccess" value="true" />
<s:property value="@java.lang.Math@PI" />
<s:property value="@@PI" /> (效果同上,当调用的是java.lang.Math方法时,可直接省略)
ognl 投影、过滤
投影:选择集合中每个元素的相同属性组成新的集合
过滤:过滤满足选择条件的集合元素
{?#this.age > 30} 所有匹配
{^#this.age > 30} 第一个
{$#this.age > 30} 最后一个
ognl变为字符串
<s:property value="'<span>Hello</span>'" escapeHTML="false" /> 不显示标签,缺省值为true
字符串转换为ognl:
<s:url value="%{#map['key1']}" />
不用%{} 括起来会输出#map['key1']
用了 会被当做ognl
%{} 设置动态的值,告诉标签的处理类,该字符串按照ognl来处理
map值,都用#