struts2值栈问题.docVIP

  • 7
  • 0
  • 约1.64万字
  • 约 12页
  • 2017-05-12 发布于河南
  • 举报
struts2值栈问题

struts2中OGNL和 ValueStack(一) 收藏 学习的时候,总分不清楚在struts2中页面的传值和取值是怎么来完成的,所以从网上搜了很多资料,现在把这些资料总结写,留着以后参考。。看完资料后也大概明白了。。。 先分清楚下ActionContext 、ValueStack 、Stack Context三者 ActionContext 一次Action调用都会创建一个ActionContext 调用:ActionContext context = ActionContext.getContext() ValueStack 由OGNL框架实现 可以把它简单的看作一个栈(List) 。 Stack Object:放入stack中的对象,一般是action。 Stack Context(map):stack上下文,它包含一系列对象,包括request/session/attr/application map等。 EL:存取对象的任意属性,调用对象的方法,遍历整个对象结… ActionContext是Action上下文,可以得到request session application ValueStack是值栈 存放表单中的值 Stack Context 栈上下文 也是用来存值的 struts2对OGNL上下文的概念又做了进一步扩充,在struts2中,OGNL上下文通常如下所示: |--request | |--application | context map|--OgnlValueStack(root) [ user, action, OgnlUtil, ... ] | |--session | |--attr | |--parameters 在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中的属性的代码就可以这样写 s:property value=postalCode/ 其它ActionContext中的非根对象属性的访问要像下面这样写: s:property value=#session.mySessionPropKey/ or s:property value=#session[mySessionPropKey]/ or s:property value=#request[myRequestPropKey]/ 对Collection的处理,内容就很简单。 s:select label=label name=name list={name1,name2,name3} value=%{name2

文档评论(0)

1亿VIP精品文档

相关文档