ValueStack,stackContext,ActionContext.之间的关系

 

三者之间的关系如下图所示:

ValueStack,stackContext,ActionContext.之间的关系

Struts2框架把OGNL Context设置为我们的ActionContext。并且ValueStack作为OGNL的根对象。除ValueStack之外,Struts2框架还把代表applicationsessionrequest这些对象的Map对象也放到ActionContext中去。(这也就是Struts2建议在Action类中不要直接访问Servlet API的原因,他可以通过ActionContext对象来部分代替这些(Servlet API)功能,以方便对Action类进行测试!)

Struts2中,采用标准命名的上下文(Context)来处理OGNL表达式。处理OGNL的顶级对象是一个Map(也叫context map),而OGNL在这个context中就是一个顶级对象(root)。在用法上,顶级对象的属性访问,是不需要任何标记前缀的。而其它非顶级的对象访问,需要使用#标记。

 Action的实例,总是放到ValueStack中。因为Action放在Value Stack中,而ValueStackroot(根对象),所以对Action中的属性的访问就可以省略#标记。但是,要访问ActionContext中其它对象的属性,就必须要带上#标记,以便让OGNL知道,不是从根对象,而是从其它对象中去寻找。

你可能感兴趣的:(ActionContext)