OGNL访问
http://localhost:8080/ognl_0100/ognl.action?username=u&password=p&cat.friend.name=judi 值栈中的内容
访问值栈中对象的普通属性(get set方法):
访问值栈中action的普通方法: OGNL访问静态方法/属性: 访问静态方法/属性的语法:前面@+类名,后面@+方法名/前面@+类名,后面@+属性名 先写类S.java public class S { } 访问静态方法: public static String STR=\; public static String s(){ } return \; 要在struts.xml中增加配置: 在Struts2中常量的值在: struts2-core-2.1.8.1.jar-->org.apache.struts2-->default.properties中查: 26 OGNL访问集合 在OgnlAction.java中添加: private List private Map get方法。。。set方法。。。。(略) public OgnlAction() { } 11.访问List: 12.访问List中某个元素: 13.访问List中元素某个属性的集合: 14.访问List中元素某个属性的集合中的特定值: 15.访问Set: 16.访问Set中某个元素: 第一种写法: users.add(new User(1)); users.add(new User(2)); users.add(new User(3)); dogs.add(new Dog(\)); dogs.add(new Dog(\)); dogs.add(new Dog(\)); dogMap.put(\, new Dog(\)); dogMap.put(\, new Dog(\)); dogMap.put(\, new Dog(\)); 27 Struts投影 投影,英文叫做projection,其实就是过滤器的意思,把符合条件的给过滤出来 投影(过滤): 投影: 投影: 执行结果: 如果去掉.{age} 执行结果: 如果想取出集合中的第一个元素。 执行结果: “^”(小尖号)代表开头,指的是:大于一的集合那些元素里头开头的第一个,它的age值的集合 “$”[dolar]代表结尾,指的是: 大于一的集合那些元素里头结尾的那个,它的age值的集合 用中括号访问元素 []: 28 执行结果: 查看Debug这个ValueStack只有两个Object,我们刚刚访问的这个Action永远在栈顶,所以如果要访问Action对象,完全可以这样写: []: 中括号访问的OGNL这个栈里面从上往下数的第几个元素; 在OGNL里面[0]代表的是ognl的stack从上往下从第0个位置开始往下一直到栈底的集合 如果要访问ognl里面的某一个成员变量比如说username,这时候如果里面有两个Action的话,第一个Action没有,它会按顺序往下找第二个Action,什么情况下会有两个Action在里面呢? 在url访问: http://localhost:8080/Struts2_1900_OGNL/test.Action 29 说明了:首先栈里面被压入了test.action,其次被压入了ognl.action所以证明了如果用了服务器端跳转,它会把用到的action挨着排往里面压。 30