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

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 技术内幕——深入解析Struts2架构设计与实现原理

    Struts2 的重要性在于其成熟的架构设计和实现原理,使得开发人员能够通过组件化的方式开发复杂的企业级应用。 Struts2 的架构设计采用了拦截器(Interceptor)机制,拦截器是一种设计模式,它允许开发者在不修改源...

    Struts2中关于ValueStack的一些操作

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

    Struts2 ——4、struts2从请求取值的三种方式

    在Struts2中,从请求取值是日常开发中的常见操作,有三种主要的方式可以实现这一功能。本篇将详细介绍这三种方法。 1. **Action上下文(ActionContext)** ActionContext是Struts2中一个关键的类,它提供了访问...

    Struts中的ognl和valueStack

    深入讲解Struts中的ognl和valueStack

    Struts2的综合应用

    总的来说,"Struts2的综合应用"这个实例涵盖了Java Web开发中的多个重要技术点,包括Struts2框架的使用、数据库操作、JSP页面展示以及MVC设计模式的应用。通过对这个项目的理解和实践,开发者可以深入掌握Struts2的...

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

    在使用Struts2框架进行Web应用开发时,经常会遇到需要从Value Stack(值栈)中获取数据的场景,尤其是在表单验证中。Struts2的Value Stack是一种可以方便地在Action和JSP页面之间传递数据的机制。本文将详细介绍如何...

    struts2jar包

    Struts2是一个强大的Java EE应用程序框架,主要用于构建企业级的Web应用。它的核心是MVC(Model-View-Controller)设计模式,可以帮助开发者组织代码,提高开发效率,并且提供了丰富的特性来支持表单验证、国际化、...

    学习OGNL在Struts2中工作原理

    ### 学习OGNL在Struts2中的工作原理 #### OGNL简介 OGNL(Object-Graph Navigation Language)是一种强大的表达式语言,用于获取和设置Java对象的属性。它是Struts2框架的一个核心特性之一,被广泛应用于框架的...

    Struts2 技术内幕——深入解析Struts2架构设计与实现原理.zip

    《Struts2技术内幕——深入解析Struts2架构设计与实现原理》这本书深入讲解了这些内容,包括但不限于Action的设计模式、Interceptor的实现原理、ValueStack的工作流程、以及Struts2与其他框架的整合策略,对于想要...

    struts1和struts2的区别

    - **Struts2**: 引入了ValueStack的概念,这使得开发者可以在视图层直接访问Action中的数据。Struts2还支持多种视图技术,如FreeMarker、Velocity等。 #### 数据绑定 - **Struts1**: 使用Commons-BeanUtils进行...

    马士兵Struts2笔记2013

    Struts2是一个流行的Java web框架,...以上就是"马士兵Struts2笔记2013"中涉及的主要知识点,这些内容涵盖了Struts2的基础配置、数据处理、验证、调试以及与视图层的交互等方面,对于理解和掌握Struts2框架非常有帮助。

    struts2学习笔记(完美总结)——转自OPEN经验库

    本文将深入探讨Struts2的核心概念,包括Action、Result、配置文件、OGNL与ValueStack、Tags以及项目中的关键实践。 **一、Action** Action是Struts2中处理业务逻辑的核心组件,它是实现了`...

    struts2中常用jar包

    这个压缩包包含了Struts2框架运行所需的一些核心jar包以及相关的源代码,这对于开发者理解和调试Struts2应用非常有帮助。下面将详细阐述Struts2框架的核心组件和这些jar包的重要性。 1. **Struts2框架核心组件**: ...

    转:struts1与struts2的区别

    - **Struts2**: 采用“ValueStack”技术,允许标签库访问值而无需显式绑定视图与对象。这种策略使得视图可以重用,即使它们引用的是不同类型的属性。 #### 8. 类型转换的能力 - **Struts1**: Struts1通常将`...

    struts2 学习资料

    首先,"struts2权威指南"是学习Struts2的核心参考资料,通常会涵盖框架的基本概念、核心组件、配置细节、MVC设计模式的应用以及实际开发中的最佳实践。这本书可能详细解释了Struts2的工作原理,如Action、...

    struts2实现文件下载功能

    在这个“Struts2实现文件下载功能”的示例中,我们将深入探讨如何利用Struts2框架来实现在web应用中让用户下载文件的功能。 首先,我们需要理解文件下载的基本原理。在Web应用中,当用户点击一个链接或提交一个表单...

    struts2测试案例

    在`test_Struts2`这个压缩包中,可能包含了创建一个简单的Struts2应用的所有必要组件,如Action类、配置文件、JSP页面和可能的测试用例。通过分析和运行这些示例,初学者可以快速掌握Struts2的基本用法和流程,为...

    struts2的工作原理

    - **ValueStack**:用于存储Action和Form Bean的数据结构,是Struts2中数据交换的核心。 - **拦截器**:一系列可插拔的组件,用于增强Action的功能,如参数校验、事务管理等。 - **结果类型**:定义如何将Action的...

    struts2入门例子

    这个"struts2入门例子"旨在帮助初学者理解Struts2的基本架构和核心功能,通过实际操作来学习如何配置Struts2框架以及实现页面跳转。 在Struts2中,`struts.xml`是核心配置文件,它是整个应用的入口点,负责定义动作...

    Struts2和Struts1的区别,详细点,主要说说Struts2

    - **Struts2**则使用了ValueStack来存储Action对象和视图数据,这种机制允许在不同的页面之间传递数据,从而实现了更加灵活的页面导航。 #### 数据类型转换 - **Struts1**使用ActionForm中的方法来转换表单提交的...

Global site tag (gtag.js) - Google Analytics