当前位置: 代码迷 >> Java Web开发 >> struts2 概念小疑点~望前辈解决.
  详细解决方案

struts2 概念小疑点~望前辈解决.

热度:3934   发布时间:2013-02-25 21:20:03.0
struts2 概念小问题~望前辈解决.....
刚学struts2....有个问题弄得不是很明白的~~希望,,了解的各位可以和我讲讲~~

就是我们在action 文件的new出来的值室或者接受到的参数等等.....

什么时候 是放在一个栈的Stack Context部分 什么时候是在Value Stack Contents部分呀~~

这个我一直迷迷糊糊的,,每次用标签的时候用了"#.."不行才换回来".." 所以想明确一下这个问题.

------解决方案--------------------------------------------------------
在Struts2中,采用标准命名的上下文(Context)来处理OGNL表达式。处理OGNL的顶级对象是一个Map(也叫context map),而OGNL在这个context中就是一个顶级对象(root)。在用法上,顶级对象的属性访问,是不需要任何标记前缀的。而其它非顶级的对象访问,需要使用#标记。
Struts2框架把OGNL Context设置为我们的ActionContext。并且ValueStack作为OGNL的根对象。除value stack之外,Struts2框架还把代表application、session、request这些对象的Map对象也放到ActionContext中去。(这也就是Struts2建议在Action类中不要直接访问Servlet API的原因,他可以通过ActionContext对象来部分代替这些(Servlet API)功能 ,以方便对Action类进行测试!)
Action的实例,总是放到value stack中。因为Action放在stack中,而stack是root(根对象),所以对Action中的属性的访问就可以省略#标记。但是,要访问ActionContext中其它对象的属性,就必须要带上#标记,以便让OGNL知道,不是从根对象,而是从其它对象中去寻找。

------解决方案--------------------------------------------------------
因为Action实例被放在Value stack中,而Value stack又是根元素中的一个,所以对Action中的属性的访问可以不用“#”,其它如request,application,session都需要加“#”
  相关解决方案