这两天在学习Struts2,看ONGL时始终提到Root和Context,搞不清这两个到底有什么关系,查阅了一系列文章之后,似乎有所感悟,如有不正确的地方,还请各位指教。
ONGL使用Map来存储对象,在你不指定Map时,它会调用addDefaultContext 方法自动创建一个Map来存储你传进来的对象,而这个Map就是所谓的Root。那么我已经有一个Map了,如何通过ONGL来访问呢?ONGL允许你指定Map,但是你通过ONGL访问你指定的Map时,要在表达式前面加上“#”(不含引号),你所指定的这个Map,就是所谓的Context。Root和Context的关系有点像自己家的和外来的关系一样,当然这里的自己是对ONGL而言的。
看如下代码:
1.Teacher.java
public class Teacher { private String name; private String course; public Teacher() { } public Teacher(String name, String course) { this.name = name; this.course = course; } public String getName() { return name; } public void setName(String name) { this.name = name; } public void setCourse(String course) { this.course = course; } public String getCourse() { return course; } }
2.MyOgnl.java
import java.util.*; import ognl.*; public class MyOgnl { public static void main(String args[]) throws Exception{ Map ctx = new HashMap(); Teacher t1 = new Teacher("LiQi", "ShuXue"); Teacher t2 = new Teacher("WangLing", "YingYu"); Teacher t = new Teacher("ZhangLi", "YuWen"); ctx.put("t1", t1); ctx.put("t2", t2); System.out.println(Ognl.getValue("#t1.course=='ShuXue'&&#t2.course=='YingYu' &&course=='YuWen'?'Matched':'Unmatched'", ctx, t)); } }
结果:
Matched
t1,t2即是预设变量(外来的),上面的表达式通过#引用了ctx中的预设变量.而t(自家的)的引用直接写属性名就可以了.
代码来自:http://blog.youkuaiyun.com/csdn1234/archive/2008/12/04/3443374.aspx
Struts2与ONGL
本文讲解了Struts2框架中ONGL表达式语言的Root和Context概念。通过实例演示了如何利用ONGL进行对象属性的访问与判断,展示了Root作为默认上下文与自定义Context的区别。
1236

被折叠的 条评论
为什么被折叠?



