OGNL这部分主要就是配置的方法,虽然不难但是比较繁琐,大家可以先做了解,等到需要用到的时候再查询。
接下来要说的是访问普通类的构造方法,很简单就不上代码了,访问普通类的构造方法:<s:property value="new com.tfj.struts2.ognl.User(9)"/>这样就可以可。
要详细说的是访问集合。还是先上ognl.jsp。9-19是访问集合的ognl表达式。
ognl.jsp
<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <%@taglib uri="/struts-tags" prefix="s"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>Ognl表达式学习</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body> <ol> <li>访问值栈中的action的普通属性:username=<s:property value="username"/></li> <li>访问值栈中对象的普通属性:<s:property value="user.age"/></li> <li>访问值栈中对象的普通属性:<s:property value="cat.friend.name"/></li> <hr/> <li>访问action的属性的方法:<s:property value="password.length()"/></li> <li>访问静态的属性:<s:property value="@com.tfj.struts2.ognl.S@STR"/></li> <li>访问静态的方法:<s:property value="@com.tfj.struts2.ognl.S@s()"/></li> <li>访问Math类:<s:property value="@@max(2,3)"/> <hr/> <li>访问普通类的构造方法:<s:property value="new com.tfj.struts2.ognl.User(9)"/></li> <hr> <li>访问List:<s:property value="users"/></li> <li>访问List中的某个元素:<s:property value="users[1]"/></li> <li>访问List中某个元素某个属性的集合:<s:property value="users.{age}"/></li> <li>访问List中某个元素某个属性集合中的特定值:<s:property value="users.{age}[0]"/>|<s:property value="users[0].age"/></li> <li>访问set:<s:property value="dogs"/></li> <li>访问set中某个元素:<s:property value="dogs[1]"/></li> <li>访问Map:<s:property value="dogmap"/></li> <li>访问Map中某个元素:<s:property value="dogmap.dog101"/></li> <li>访问Map中所有key:<s:property value="dogmap.keys"/></li> <li>访问Map中所有value:<s:property value="dogmap.values"/></li> <li>访问容器大小:<s:property value="dogmap.size()"/>|<s:property value="dogs.size"/> </ol> <s:debug></s:debug> </body> </html>
9.访问List 直接访问List的名称就可以了。
10.访问List中的某个元素,用中括号。
11.访问List中某个元素某个属性的集合,用大括号把属性名括起来。
12.访问List中某个元素某个属性集合中的特定值,有两种方式,我们习惯于用后一种。
13.访问set,访问set名。
14.访问set中某个元素,因为set是无序的,无法访问。
15.访问Map,访问Map名称。
16.访问Map中某个元素,直接访问。
17.访问Map中所有key,加keys。
18.访问Map中所有value,加values。
19.访问容器大小,有两种方式size带不带括号都行。
接下来要说的就是投影了,简单说就是过滤,选择集合中符合条件的显示出来。
<li>投影:<s:property value="users.{?#this.age==1}.{age}"/></li>
<li>投影:<s:property value="users.{^#this.age>1}.{age}"/></li>
<li>投影:<s:property value="users.{$#this.age>1}.{age}"/></li>
<li>投影:<s:property value="users.{$#this.age>1}==null"/>
20.显示users里age为1的age集合。
21.^表示第一个,表达式表示第一个age大于1,显示age的集合。
22.$表示最后一个,表达式表示最后个age大于1,显示age的集合。
23.这是个判断,很好理解。
下一部分就是中括号表达式。
<li>[]:<s:property value="[0]"/>
会得到
这个表达式会访问对应的action,[]:<s:property value="[0].username"/>就可以得到u。
还有如果第一个action里没有username,他就会找第二个action,在服务器跳转的时候,值栈里有多个action。