1.基本概念
ognl(object graph navigation languange) 对象导航图语言。是java的开源表达式语言,嵌套在struts2当中。作用:对数据进行访问,拥有类型转换,访问对象方法,操作集合对象等功能。
2.#,%,$用法
#:1)访问非根对象属性。struts2中的值栈被视为根对象。Struts2依赖ValueStack对象。ValueStack对象贯穿整个Action的生命周期(每个Action的实例对象都会有一个ValueStack对象),struts2接收到客户端传来的.action请求后,就会创建一个action的实例,并将Action类的的相应属性放到ValueStack对象的顶层节点并赋予初始值,然后struts2会调用拦截链中的拦截器,当调用完所有的拦截器后,将ValueStack对象顶层节点的属性值赋给Action类中相应的属性,再调用Action类的action方法。# = ActionContext.getContext();#request.aa= ActionContext.getContext().getRequest().getParameter("aa");#session.aa=ActionContext.getContext().getSession().getAttribute("aa");#application.aa=application.getAttribute("aa ")查找顺序:request --> session --> application2)用于过滤和投影集合。persons.{?#this.age>20}3)用于构造map#{'a':'b','c':'d'}%:其用途是在标志的属性为字符串类型时,计算OGNL表达式的值。$:在国际资源文件或是配置文件中引用ognl表达式3.常用OGNL表达式
1)调用静态方法:@package.classname@methodname(parameter) 对于Math默认类即可@@min(1,2)2) 访问集合:<s:property value="myList"/> <s:property value="myList[0]"/> 通过下标索引访问其中值<s:property value="mySet" /> <s:property value="mySet.size" /> Set无顺序,不能通过下标<s:property value="myMap" /> <s:property value="myMap.keys"/> <s:property value="myMap.values"/>3)过滤:collection.{? expression} collection.{^ expression} 第一项 collection.{& expression} 最后一项4)投影:<s:property value="stus.{?#this.grade>=60}.username" /> 成绩及格的名字集合<s:property value="stus.{?#this.grade>=60}.username[0]" /> 成绩及格的第一个名字5)关于Struts2标签库属性值的%与#号的关系:
如果标签的属性值是OGNL表达式,那么无需加上%{}。
如果标签的属性值是字符串类型,那么在字符串当中凡是出现的%{}都会被解析成OGNL表达式,解析完毕后再与其他的字符串进行拼接构造出最后的字符串值。
我们可以在所有的属性值上加%{},这样如果该属性值是OGNL表达式,那么标签处理类就会将%{}忽略掉。