1、OGNL
Object-Graph Navigation Language,对象-图 导航语言,可以方便的操作struts2值栈对象
2、对象栈操作方法
(1)action普通属性的访问方法
<s:property value="[n].pName"/>
从对象栈第n个对象开始查找pName属性的值;
<s:property value="[0].pName"/>,表示从栈顶对象开始查找,而从栈顶对象开始查找又可以省略索引;
<s:property value="pName"/>,通常这么写,表示从栈顶对象开始查找pName,直到找到为止,若找不到则为"";
(2)action中的对象属性的访问方法
假设action实例中有给person对象,则
<s:property value="[n].person.personName"/>,表示从第n个栈中对象查找person.personName;
同样,<s:property value="[0].person.personName"/>,表示从栈顶对象开始查找;
省略掉[0],即为<s:property value="person.personName"/>
也可以写成<s:property value="person['personName']"/>
可以通过,<s:debug />标签进行查看
3、map栈访问方法
(1)session中属性的访问
<s:property value="#session.product.pName"/>,其中product是一个实体对象;
(2)request中属性的访问
<s:property value="#request.test.person.personName"/>,其中test对象中有一个person对象;
4、访问静态属性和静态方法
(1)静态属性访问
<s:property value="@java.lang.Math@PI" />
(2)静态方法访问
默认情况下静态方法不允许访问,需要设置一个常量值:
<constant name="struts.ognl.allowStaticMethodAccess" value="true"></constant>
<s:property value="@java.lang.Math@cos(0)"/>
5、访问实例方法
<s:property value="[n].setpName('jerry')"/>,n表示从栈对象中第n个对象开始搜索setpName方法
比如<s:property value="[0].setpName('jerry')"/>表示从栈顶对象开始搜索,省略掉[0],即
<s:property value="setpName('jerry')"/>
6、数组的访问
<%
String[] names=new String[]{"aa","bb","cc"};
request.setAttribute("names", names);
%>
<s:property value="#attr.names.length"/>
<s:property value="#request.names[2]"/>
7、Map的访问
<%
Map<String,String> map1=new HashMap<String,String>(); map1.put("AA", "a");
map1.put("BB", "b");
map1.put("CC", "c");
request.setAttribute("map1",map1);
%>
<s:property value="#request.map1.size"/>
<s:property value="#attr.map1['AA']"/>