• struts2中valueStack,stackContext以及actionContext的关系


    一,首先给出三者的定义

      1.valueStack: 里面存放的是Action类中通过set方法设置的属性值(表单传过来的值等),由OGNL框架实现;
      2.stackContext: 也是用来存值的,stack上下文,它包含一些列对象,包括request/session/attr/application map等。 
      3.actionContext: 是action的上下文,可以得到request,session,application等.
       我们在JSP页面中访问value stack的内容时,是不用加#,而如果是访问stack context的其他对象则要加上#。
     
    二,如何获得ActionContext?
      1.在自定义的拦截器中:使用ActionInvocation.getInvocationContext()或者使用ActionContext.getContext()。
      2.在Action类中:让拦截器注入或者使用ActionContext.getContext()。
      3.在非Action类中:让Action类传递参数、使用注入机制注入或者使用ActionContext.getContext()。
      注意:只有运行在request线程中的代码才能调用ActionContext.getContext(),否则返回的是null。
       
    三,ActionContext有什么作用?  
      1.通过ActionContext可以获得HttpServletRequest类:
    HttpServletRequest request = (HttpServletRequest) actionContext.get(StrutsStatics.HTTP_REQUEST);
      2.通过ActionContext也可以获得request的Map:
    Map requestMap = (Map) actionContext.get("request");
    

      因此,在JSP中,用“#request”来获得request的Map,用“#request.key”或者“#request[‘key‘]”来读取Map中的值。

    四,那ValueStack与ActionContext到底有什么联系和区别:

      ~~~简单两句话概括就是:~~~

      相同点:它们都是在一次HTTP请求的范围内使用的,即它们的生命周期都是一次请求。
      不同点:值栈是栈的结构,ActionContext是映射(Map)的结构。

    需要详细了解ActionContext的可以去参考这篇文章:http://www.bubuko.com/infodetail-355138.html

     

  • 相关阅读:
    IOS-UI基础-图片浏览器
    IOS-UI基础-UIImageView帧动画
    IOS-UI-transform
    IOS-UI基础-按钮扩展
    IOS-UI基础-UIView和UIViewController
    IOS-UI基础-按钮
    OC-关于COPY关键字
    OC-NSNumber与NSValue
    OC-NSFileManager创建目录
    2019规划目标
  • 原文地址:https://www.cnblogs.com/xiaoming0601/p/5868411.html
Copyright © 2020-2023  润新知