`

Struts2的Stack Context和ValueStack

 
阅读更多
1、提到Struts2的传值功能时,经常会见到Stack Context和ValueStack等概念,那么它们到底是什么,有什么作用呢。
ValueStack(值栈):Struts2将OGNL上下文设置为Struts2中的ActionContext(内部使用的仍然是
OgnlContext),并将值栈设为OGNL的根对象。
ActionContext:一次Action调用都会创建一个ActionContext
              如:ActionContext ctx = ActionContext.getContext();
Stack Object:放入stack中的对象,一般是action。
Stack Context(map):stack上下文,它包含一系列对象,包括request、session、attr、application map等。
2、访问Stack Context中的对象的属性时要使用"#对象名.属性名"的方式,使用push标签可以将原来位于Stack Context中的对象放到ValueStack的栈顶。用push标签将对象保存在ValueStack的栈顶后,只需要使用"属性名"就可以直接访问了。如下面的例子:
<body>
<s:bean name="cg.struts.at.User" id="user">
   <s:param name="username" value="'cg'"/>
   <s:param name="password" value="'p123'"/>
</s:bean>
<table border="1" width="80%">
  <tr align="center">
   <td colspan="4">用户信息</td>
  </tr>
  <tr align="center">
   <td>用户名:</td>
   <td><s:property value="#user.username"/></td>
   <td>密码:</td>
   <td><s:property value="#user.password"/></td>
  </tr> 
</table>
使用push标签,简化值的访问
<s:push value="#user">
  <table border="1" width="80%">
   <tr align="center">
    <td colspan="4">用户信息</td>
   </tr>
   <tr align="center">
    <td>用户名:</td>
    <td><s:property value="username"/></td>
    <td>密码:</td>
    <td><s:property value="password"/></td>
   </tr> 
  </table>
</s:push>
</body>
3、如果ValueStack栈顶是集合对象的话,通常可以用iterator标签取得位于ValueStack的顶端的集合对象,遍历集合并输出,遍历完成后集合对象会被移出ValueStack。
4、在页面输出ValueStack和Stack Context的方法
   只要在<body>标签中加入<s:debug/>,运行时就可以生成相应的链接,点击该链接就可以显示stack相关信息。
5、在Action中获得ActionContext、request、session、application对象的方法
    5.1 缺省情况下,Struts2的Action类是从ActionSupport类继承过来的,因此,可以用下面的语句获得ActionContext对象。
    ActionContext ctx = ActionContext.getContext();
    ctx.put(("address","上海");
    5.2 如果想要在Action类中使用request对象,最简单的方法就是在定义类的时候实现ServletRequestAware接口。然后就可以直接在execute()方法中使用request对象,例如:
    request.setAttribute("address","上海");
    5.3 如果想要在Action类中使用session对象,就要在定义类的时候实现SessionAware接口。然后就可以直接在execute()方法中使用session对象。例如:
    session.put("address","上海");
    5.4 当需要在Action类中使用application对象时,在定义类的时候要实现ServletContextAware接口。然后可以直接在execute()方法中使用application对象。例如:
    application.setAttribute("address","上海");
6、在jsp中用OGNL表达式获取不同范围的值
    6.1 获取地址后面的参数信息(即上海)(http://localhost:8080/strutslogin/login.action?address=上海)的方法如下:
    <s:property value="parameters.address"/>
    6.2 获取上述request中信息的方法如下:
    <s:property value="#request.address"/>
    6.3 获取上述session中信息的方法如下:
    <s:property value="#session.address"/>
    6.4 获取上述application中信息的方法如下:
    <s:property value="#application.address"/>
    6.5 使用"#attr.参数名"的方法访问各种变量的顺序是:
    request>session>application
分享到:
评论

相关推荐

    Struts2 Value Stack Contents 中取值、多个集合数组

    Struts2 Value Stack Contents 中取值、多个集合数组示例

    马士兵Struts2笔记2013

    建立一个Struts2 工程,用Action的属性接收参数,使用Domain Model (实体模型) 接收参数,Struts2_2.1.6版本的中文问题,Struts模块包含,Struts简单数据验证 ,Struts ValueStack(值栈) Debug,Value Stack ...

    Struts2入门教程(全新完整版)

    10.获取Stack Context中的信息 26 11.总结$ # %的区别 27 12.总结OGNL[重点] 27 五、拦截器 28 1.概述strust2中的拦截器 28 2.自定义拦截器 28 方式一,实现Interceptor接口。 28 方式二、继承AbstractInterceptor...

    精讲Struts2

    精简全面讲解Struts 2.0Struts2产生背景 工作原理 实现步骤 标签 命名空间 转换器 国际化 输出 令牌机制 拦截器 表单校验(jQuery.validate验证框架) ...OGNL(ActionContext StackContext ValueStack区别)

    struts2相关资料

    这里包含了struts2标签的介绍,介绍了Struts2中OGNLvalueStack和stackContext,radio List的预选问题,文件的上传与下载,防止表单重复提交optiontransferselect字符串拼接,struts2_Path_路径问题

    Struts2 拦截器 Interceptor

    简单的拦截器例子,适合初学者学习,也是一个备忘录

    深入浅出Struts2(附源码)

    作者处处从实战出发,在丰富的示例中直观地探讨了许多实用的技术,如数据类型转换、文件上传和下载、提高Struts 2应用的安全性、调试与性能分析、FreeMarker、Velocity、Ajax,等等。跟随作者一道深入Struts 2,聆听...

    Z-Stack 3.0.2 和 2.5.1协议栈

    Z-Stack 3.0.2和 2.5.1 协议栈. TI公司在推出CC2530同时, 发布的Zigbee协议栈.

    C语言头文件 STACK

    C语言头文件 STACKC语言头文件 STACKC语言头文件 STACKC语言头文件 STACKC语言头文件 STACKC语言头文件 STACKC语言头文件 STACKC语言头文件 STACKC语言头文件 STACKC语言头文件 STACKC语言头文件 STACKC语言头文件 ...

    Practical Apache Struts2 Web 2.0 Projects

    Integrate and use Struts 2 with other frameworks such as Spring to form a broader enterprise Java application stack. Who is this book for? Developers who want a hands–on practical book ...

    value stack

    详细介绍struts value stack内容,对理解value stack的结构、内容、生成原理有巨大帮助

    jfreechar 整合struts2.1.8版本生成线图,饼图,柱形图

    &lt;package name="com.kay.struts2" extends="struts-default" namespace="/test"&gt; &lt;!-- 定义拦截器 name:拦截器名称 class:拦截器类路径 --&gt; ...

    struts2 OGNL之&lt;s:property&gt;标签访问值栈(value stack)用法

    struts2 OGNL之标签访问值栈(value stack)用法,希望能对大家有帮助

    ELK Stack权威指南 第2版

    本书对ELKstack的原理进行了解剖,不仅分享了大量实战案例和实现效果,而且分析了部分源代码,使读者不仅知其然还知其所以然。读者可通过本书的学习,快速掌握实时日志处理方法,并搭建符合自己需要的大数据分析系统...

    c++stack_和_queue用法

    c++stack_和_queue用法,很好的介绍了STL中stack和queue的用法,及其使用方法

    FSL_LIN_2.X_STACK.zip_FSL_LIN_2.X_STACK_LIN代码_NXP LIN_lin 2.2_li

    一个完整的LIN代码程序,使用NXP提供的驱动开发

    Apress - Pro MERN Stack, 2nd.2019.epub

    Apress - Pro MERN Stack, 2nd.2019.epub Apress - Pro MERN Stack, 2nd.2019.epub

Global site tag (gtag.js) - Google Analytics