访问值栈中的action的普通属性:username = <s:property value="username"/>
访问值栈中对象的普通属性(get set方法):
<s:property value="user.age"/>
<s:property value="user['age']"/>
<s:property value="user[""age""]"/>
wrong: <%--<s:property value="user[age]"/>--%>
访问值栈中对象的普通属性(get set方法):
<s:property value="cat.friend.name"/>
访问值栈中对象的普通方法:<s:property value="password.length()"/>
访问值栈中对象的普通方法:<s:property value="cat.miaomiao()" />
访问值栈中action的普通方法:<s:property value="m()" />
访问静态方法:<s:property value="@com.bjsxt.struts2.ognl.S@s()"/>
访问静态属性:<s:property value="@com.bjsxt.struts2.ognl.S@STR"/>
访问Math类的静态方法:<s:property value="@@max(2,3)" />
访问普通类的构造方法:
<s:property value="new com.bjsxt.struts2.ognl.User(8)"/>
访问List:<s:property value="users"/>
访问List中某个元素:<s:property value="users[1]"/>
访问List中元素某个属性的集合:<s:property value="users.{age}"/>
访问List中元素某个属性的集合中的特定值:
<s:property value="users.{age}[0]"/>
<s:property value="users[0].age"/>
访问Set:<s:property value="dogs"/>
访问Set中某个元素:<s:property value="dogs[1]"/>
<!--set是没有顺序的,所以取下标值是没有意义的-->
访问Map:<s:property value="dogMap"/>
访问Map中某个元素:<s:property value="dogMap.dog101"/>
<s:property value="dogMap['dog101']"/>
<s:property value="dogMap[""dog101""]"/><!--取出key为dog101的值-->
访问Map中所有的key:<s:property value="dogMap.keys"/>
访问Map中所有的value:<s:property value="dogMap.values"/>
访问容器的大小:<s:property value="dogMap.size()"/>
<s:property value="users.size"/> <!--不加ku9ohao也可以访问-->
投影(过滤):<s:property value="users.{?#this.age==1}[0]"/><!--格式固定,this指循环过程中的每一个对象。取出users里age等于1的集合里面的第一个元素-->
投影:<s:property value="users.{^#this.age>1}.{age}"/><!--^指第一个元素-->
投影:<s:property value="users.{$#this.age>1}.{age}"/><!--$指结尾的元素-->
投影:<s:property value="users.{$#this.age>1}.{age} == null"/><!--查看age>1的user的age是否为空-->
[]:<s:property value="[0].username"/>
<!--指value stack栈顶的那个Action,因为action在栈顶。0值value stack从上往下数的第几0个元素 -->
<!--[0]代表action的位置,而不是action那个对象,[0]代表从0往下数到栈底的对象的集合。-->
<!--[0].username,如果有多个action,在第一个action里找不到[0].username,会往下找-->