`
wb284551926
  • 浏览: 542448 次
文章分类
社区版块
存档分类
最新评论

struts2中页面取值的原理以及valueStack的应用(转)

阅读更多


  1. //获取封装输出信息的 ValueStack 对象   
  2. ValueStack vs = (ValueStack)request.getAttribute("struts.valueStack");   
  3.   
  4. //调用ValueStack的fineValue方法获取books属性值   
  5.     String[] books = (String[])vs.findValue("books");  

上面代码返回一个 ValueStack 对象,该对象封装了 Action 全部的输出信息。该对象是 Struts 2 使用的一个 ValueStack对象,可以通过 OGNL 表达式非常方便的访问该对象封装的信息。

ValueStack 有点类似于 Map 结构,但它比 Map 结构更加强大(因为它可以根据表达式来查询值)。Action 所以的属性都被封装到了 ValueStack 对象中,Action 中的属性名可以理解为 ValueStack 中 value 的名字。

web.xml

  1. <?xml version="1.0" encoding="GBK"?>  
  2. <!-- 配置Web应用配置文件的根元素,并指定配置文件的Schema信息 -->  
  3. <web-app xmlns="http://java.sun.com/xml/ns/javaee"  
  4.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  5.     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee   
  6.     http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">  
  7.     <!-- 定义Struts 2的核心控制器:FilterDispatcher -->  
  8.     <filter>  
  9.         <!-- 定义核心Filter的名字 -->  
  10.         <filter-name>struts2</filter-name>  
  11.         <!-- 定义核心Filter的实现类 -->  
  12.         <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>  
  13.     </filter>  
  14.     <!-- FilterDispatcher用来初始化Struts 2并且处理所有的HTTP请求 -->  
  15.     <filter-mapping>  
  16.         <filter-name>struts2</filter-name>  
  17.         <url-pattern>/*</url-pattern>  
  18.     </filter-mapping>  
  19. </web-app>  

Struts.xml

  1. <?xml version="1.0" encoding="GBK"?>  
  2. <!-- 指定Struts 2配置文件的DTD信息 -->  
  3. <!DOCTYPE struts PUBLIC   
  4.     "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN"   
  5.     "http://struts.apache.org/dtds/struts-2.1.dtd">  
  6. <!-- struts是Struts 2配置文件的根元素 -->  
  7. <struts>  
  8.     <!-- Struts 2的Action必须放在指定的包空间下定义 -->  
  9.     <package name="strutsqs" extends="struts-default">  
  10.         <!-- 定义login的Action,该Action的实现类为lee.LoginAction类 -->  
  11.         <action name="login" class="lee.LoginAction">  
  12.             <!-- 定义处理结果和视图资源之间映射关系 -->  
  13.             <result name="error">/error.jsp</result>  
  14.             <result name="success">/welcome.jsp</result>  
  15.         </action>  
  16.         <!-- 定义获取图书的Action,对应实现类为lee.GetBooksAction -->  
  17.         <action name="getBooks" class="lee.GetBooksAction">  
  18.             <!-- 如果处理结果返回login,进入login.jsp页面 -->  
  19.             <result name="login">/login.jsp</result>  
  20.             <!-- 如果处理结果返回success,进入showBook.jsp页面 -->  
  21.                 <result name="success">/showBook.jsp</result>    
  22.         </action>  
  23.   
  24.     </package>  
  25. </struts>  

GetBooksAction.java

  1. import com.opensymphony.xwork2.Action;   
  2. import com.opensymphony.xwork2.ActionContext;   
  3.   
  4. public class GetBooksAction implements Action   
  5. {   
  6.     //该属性并不用于封装用户请求参数,而用于封装Action需要输出到JSP页面的信息   
  7.     private String[] books;   
  8.     //books属性的setter方法   
  9.     public void setBooks(String[] books)   
  10.     {   
  11.         this.books = books;   
  12.     }   
  13.     //books属性的getter方法   
  14.     public String[] getBooks()   
  15.     {   
  16.         return books;   
  17.     }   
  18.     //处理用户请求的execute方法   
  19.     public String execute() throws Exception   
  20.     {   
  21.         //获取Session中的user属性   
  22.         String user = (String)ActionContext.getContext()   
  23.             .getSession().get("user");   
  24.         //如果user属性不为空,且该属性值为crazyit   
  25.         if (user != null && user.equals("crazyit"))   
  26.         {   
  27.             //创建BookService实例   
  28.             BookService bs = new BookService();   
  29.             //将业务逻辑组件的返回值设置成该Action的属性   
  30.             setBooks(bs.getLeeBooks());   
  31.             return SUCCESS;   
  32.         }   
  33.         else  
  34.         {   
  35.             return LOGIN;   
  36.         }   
  37.     }   
  38. }  

BookService.java

  1. public class BookService   
  2. {   
  3.     //以一个数组模拟从持久存储设备(数据库)中取出的数据   
  4.     private String[] books =    
  5.         new String[] {   
  6.             "疯狂Java讲义" ,   
  7.             "轻量级Java EE企业应用实战",   
  8.             "疯狂Ajax讲义",   
  9.             "疯狂XML讲义",   
  10.             "Struts 2权威指南"  
  11.         };   
  12.     //业务逻辑方法,该方法返回全部图书   
  13.     public String[] getLeeBooks()   
  14.     {   
  15.         return books;   
  16.     }   
  17. }  

showBooks.jsp

  1. <%@ page contentType="text/html; charset=GBK" language="java" errorPage="" %>  
  2. <%@ page import="java.util.*,com.opensymphony.xwork2.util.*"%>  
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"   
  4.     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
  5. <html xmlns="http://www.w3.org/1999/xhtml">  
  6. <head>  
  7.     <title>图书</title>  
  8.     <meta name="website" content="http://www.crazyit.org" />  
  9. </head>  
  10. <body>  
  11. <table border="1" width="360">  
  12.     <caption>图书</caption>  
  13.     <%   
  14.     //获取封装输出信息的ValueStack对象   
  15.     ValueStack vs = (ValueStack)request   
  16.         .getAttribute("struts.valueStack");   
  17.     //调用ValueStack的fineValue方法获取books属性值   
  18.     String[] books = (String[])vs.findValue("books");   
  19.     //迭代输出全部图书信息   
  20.     for (String book : books)   
  21.     {      
  22.     %>  
  23.     <tr>  
  24.         <td>书名:</td>  
  25.         <td><%=book%></td>  
  26.     </tr>  
  27.     <%}%>  
  28. </table>  
  29. </body>  
  30. </html>  
分享到:
评论

相关推荐

    Struts2中关于ValueStack的一些操作

    关于ValueStack的描述: ...再将ValueStack暴露给视图页面,这样页面就可以直接访问后台处理生成的数据。 下面我们用一个雇员类为例,使用Junit框架(单元测试框架)来展示ValueStack的功能。 ......

    Struts中的ognl和valueStack

    深入讲解Struts中的ognl和valueStack

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

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

    Struts2中的参数传递

    我们知道,Struts2完成参数传递处理工作的基础是OGNL和ValueStack。而在这个 过程中,我也把Struts2所要做的工作大致归纳为两个方面: 1. 对OGNL操作进行封装,完成OGNL表达式所表示的值到Java对象的值传递机制 2. ...

    Struts2基础教程.docx

    在Struts2中,可以使用ActionContext来获取请求参数和Session信息,使用ValueStack来存储和获取数据。Struts2也支持使用OGNL表达式来访问和操作数据。 Struts2提供了强大的标签库,包括s标签、sx标签、ui标签等,...

    Struts2练习Demo以及随笔

    Struts的开发步骤、OGNL、ValueStack、Action核心、Result基本原理、Struts2核心标记库、Struts2拦截器、自定义拦截器、UI标记、非UI标记、资源文件国际化等等实例全面使用。

    Struts2 in action中文版

    8.1.1 页面上:如何使用自定义结果组件构建Struts 2 Ajax应用程序 171 8.1.2 实现JSON结果类型 173 8.2 常用的结果类型 180 8.2.1 RequestDispatcher,也叫做dispatcher 180 8.2.2 ServletRedirectResult,也叫做...

    struts2标签使用方法

    Struts2 允许在页面中使用自定义组件,这完全能满足项目中页面显示复杂、多变的需求。 Struts2 标签分类 Struts2 标签库可以分为三大类:UI 标签、非 UI 标签和 Ajax 标签。 UI 标签 UI 标签主要用于生成 HTML ...

    马士兵Struts2笔记2013

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

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

    十二、总结 本教程对struts2的基本知识进行了一些说明,关于struts2的更多详细内容应参看struts2的官方文档及提供的app实例。 下面对struts2的基本执行流程作一简要说明,此流程说明可以结合官方提供的struts2结构图...

    struts2 学习例子

    Struts2允许在页面中使用自定义组件,这完全能满足项目中页面显示复杂,多变的需求。 Struts2的标签库有一个巨大的改进之处,struts2标签库的标签不依赖于任何表现层技术,也就是说strtus2提供了大部分标签,可以在...

    struts2 标签库使用文档

    Struts2标签库的组成 ...数据访问标签:主要包含用于输出值栈(ValueStack)中的值,完成国际化等功能的标签。 流程控制标签:主要包含用于实现分支,循环等流程控制的标签。 AJAX标签:用于支持Ajax效果

    Struts用的ognl和valueStack(vs)实例

    Struts用的ognl和valueStack(vs)实例

    Struts2在Action中获得Response对象的四种方法

    Struts2 是一个基于MVC 模式的 Web 应用程序框架,它提供了多种方式来获取 Response 对象,以下是四种获得 Response 对象的方法: 方法 1:使用 Struts2 Aware 拦截器 在 Struts2 中,可以通过实现Aware接口来获取...

    linjin101#javaStudy#Struts2中的OGNL和值栈ValueStack1

    1、什么是值栈 2、值栈的内部结构 3、ActionContext和ValueStatck的关系 4、如何获取值栈对象 5、向值栈存数据 6、从值栈中获取数据

    Struts标签取值方式

    当Action的valueStack中有该属性的值时,只需直接使用该属性的名字即可; 当Action的valueStack中没有该属性的值时,比如在session,application范围中的属性值时,需要加#或 者#attr.;

    Struts2基础教程

    讲解Struts2入门基础,包括Action、Result、ValueStack等,Struts2初学者会有帮助

    struts学习笔记(3)

    向页面传值可以使用struts2中特有的两个类的对象 com.opensymphony.xwork2.ActionContext和com.opensymphony.xwork2.util.ValueStack 1)ValueStack和ActionContext的作用: 当客户端向action发送请求并且最后跳转...

    在线培训:ValueStack

    培训主要学习以下几个知识点: 1、制作PPT,讲解栈的特点和使用方法 2、编码实现回文对 3、制作PPT,讲解Struts2中的ValueStack 4、编码改变ValueStack中的对象的顺序

Global site tag (gtag.js) - Google Analytics