- 浏览: 519463 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (278)
- java (41)
- 设计模式 (4)
- sql (10)
- webservice (2)
- spring (9)
- struts (6)
- struts2 (32)
- hibernate (27)
- Struts_hibernate_Spring整合 (4)
- Velocity (1)
- Servlet (9)
- JSP (6)
- javascript (19)
- jquery (10)
- ajax (4)
- html、xml (3)
- JDBC (2)
- JDK (6)
- mysql (2)
- oracle (11)
- SqlServer (1)
- DB2 (4)
- tool (7)
- linux (5)
- UML (1)
- eclipse (8)
- 执行文件 (1)
- 应用服务器 (4)
- 代码重构 (1)
- 日本語 (19)
- 交规 (1)
- office (9)
- firefox (1)
- net (1)
- 测试 (1)
- temp (6)
- 对日外包 (1)
- windows (1)
- 版本控制 (1)
- android (2)
- 项目管理 (1)
最新评论
//获取封装输出信息的 ValueStack 对象 ValueStack vs = (ValueStack)request.getAttribute("struts.valueStack"); //调用ValueStack的fineValue方法获取books属性值 String[] books = (String[])vs.findValue("books");
上面代码返回一个 ValueStack 对象,该对象封装了 Action 全部的输出信息。该对象是 Struts 2 使用的一个 ValueStack对象,可以通过 OGNL 表达式非常方便的访问该对象封装的信息。
ValueStack 有点类似于 Map 结构,但它比 Map 结构更加强大(因为它可以根据表达式来查询值)。Action 所以的属性都被封装到了 ValueStack 对象中,Action 中的属性名可以理解为 ValueStack 中 value 的名字
web.xml
<?xml version="1.0" encoding="GBK"?> <!-- 配置Web应用配置文件的根元素,并指定配置文件的Schema信息 --> <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5"> <!-- 定义Struts 2的核心控制器:FilterDispatcher --> <filter> <!-- 定义核心Filter的名字 --> <filter-name>struts2</filter-name> <!-- 定义核心Filter的实现类 --> <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class> </filter> <!-- FilterDispatcher用来初始化Struts 2并且处理所有的HTTP请求 --> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> </web-app>
Struts.xml
<?xml version="1.0" encoding="GBK"?> <!-- 指定Struts 2配置文件的DTD信息 --> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd"> <!-- struts是Struts 2配置文件的根元素 --> <struts> <!-- Struts 2的Action必须放在指定的包空间下定义 --> <package name="strutsqs" extends="struts-default"> <!-- 定义login的Action,该Action的实现类为lee.LoginAction类 --> <action name="login" class="lee.LoginAction"> <!-- 定义处理结果和视图资源之间映射关系 --> <result name="error">/error.jsp</result> <result name="success">/welcome.jsp</result> </action> <!-- 定义获取图书的Action,对应实现类为lee.GetBooksAction --> <action name="getBooks" class="lee.GetBooksAction"> <!-- 如果处理结果返回login,进入login.jsp页面 --> <result name="login">/login.jsp</result> <!-- 如果处理结果返回success,进入showBook.jsp页面 --> <result name="success">/showBook.jsp</result> </action> </package> </struts>
GetBooksAction.java
import com.opensymphony.xwork2.Action; import com.opensymphony.xwork2.ActionContext; public class GetBooksAction implements Action { //该属性并不用于封装用户请求参数,而用于封装Action需要输出到JSP页面的信息 private String[] books; //books属性的setter方法 public void setBooks(String[] books) { this.books = books; } //books属性的getter方法 public String[] getBooks() { return books; } //处理用户请求的execute方法 public String execute() throws Exception { //获取Session中的user属性 String user = (String)ActionContext.getContext() .getSession().get("user"); //如果user属性不为空,且该属性值为crazyit if (user != null && user.equals("crazyit")) { //创建BookService实例 BookService bs = new BookService(); //将业务逻辑组件的返回值设置成该Action的属性 setBooks(bs.getLeeBooks()); return SUCCESS; } else { return LOGIN; } } }
BookService.java
public class BookService { //以一个数组模拟从持久存储设备(数据库)中取出的数据 private String[] books = new String[] { "疯狂Java讲义" , "轻量级Java EE企业应用实战", "疯狂Ajax讲义", "疯狂XML讲义", "Struts 2权威指南" }; //业务逻辑方法,该方法返回全部图书 public String[] getLeeBooks() { return books; } }
showBooks.jsp
<%@ page contentType="text/html; charset=GBK" language="java" errorPage="" %> <%@ page import="java.util.*,com.opensymphony.xwork2.util.*"%> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>图书</title> <meta name="website" content="http://www.crazyit.org" /> </head> <body> <table border="1" width="360"> <caption>图书</caption> <% //获取封装输出信息的ValueStack对象 ValueStack vs = (ValueStack)request .getAttribute("struts.valueStack"); //调用ValueStack的fineValue方法获取books属性值 String[] books = (String[])vs.findValue("books"); //迭代输出全部图书信息 for (String book : books) { %> <tr> <td>书名:</td> <td><%=book%></td> </tr> <%}%> </table> </body> </html>
发表评论
文章已被作者锁定,不允许评论。
-
Struts1 与 Struts2 的12点区别
2011-11-16 11:14 7411) 在Action实现类方面 ... -
Struts 2 的 Ajax 支持(四)
2011-03-14 16:21 17435.4 tabbedpanel 标签 ... -
Struts 2 的 Ajax 支持(三)
2011-02-11 13:18 24365.2 submit 和 a 标签 ... -
Struts 2 的 Ajax 支持(二)
2011-01-27 14:08 2399四、 基于 Dojo 的 pub-sub 事件模型 ... -
Struts 2 的 Ajax 支持(一)
2011-01-20 14:55 2487一、 Ajax 概述 ... -
Struts 2 的拦截器(三)
2011-01-20 13:09 2908六、 拦截器示例 : 实现权限控制 权限检 ... -
Struts 2 的拦截器(二)
2011-01-12 16:38 1629四、 开发自己的拦截器 Struts 2 ... -
Struts 2 的拦截器(一)
2010-12-31 16:53 2022一、 理解拦截器 ... -
Struts 2 的标签库(五)
2010-12-29 11:35 11446.8 select 标签 以下代码 都是基 ... -
Struts 2 的标签库(四)
2010-12-24 16:21 1647六、 表单标签 表单标签,分为 2 种 : f ... -
Struts 2 的标签库(三)
2010-12-20 14:15 1974四、 数据标签 数据标签主要 ... -
Struts 2 的标签库(二)
2010-12-15 16:21 2031三、 控制标签 Str ... -
Struts 2 的标签库(一)
2010-12-13 13:47 1364一、 Struts 2 标签库概述 ... -
Struts 2 的国际化(二)
2010-12-09 13:25 2261二、 Struts 2 的国际化入门 ... -
Struts 2 的国际化(一)
2010-12-06 22:44 1307一、 程序国际化简 ... -
Struts2 上传和下载文件(三)
2010-12-03 14:58 1795三、 同时上传多个 ... -
Struts2 上传和下载文件(二)
2010-11-29 13:37 1984二、 Struts 2 的文件上传 ... -
Struts2 上传和下载文件(一)
2010-11-17 22:28 2088一、 文件上传的原理 1. 表单元 ... -
struts2 输入校验 (四)
2010-11-15 22:43 1217六、 手动完成输入校验 对于一些特殊的检验 ... -
struts2 输入校验 (三)
2010-11-08 13:25 1722五、 内建校验器 S ...
相关推荐
4. **ValueStack与OGNL(Object-Graph Navigation Language)**:ValueStack是Struts2中用于数据传递的机制,它是一个对象栈,将Action的属性暴露给视图层。OGNL是Struts2的默认表达式语言,用于在Action对象和视图...
6. **ValueStack**:ValueStack是Struts2.0中用于存放Action上下文数据的数据结构,它可以方便地进行OGNL(Object-Graph Navigation Language)表达式访问。 7. **OGNL**:OGNL是一种强大的表达式语言,用于在...
OGNL(Object-Graph Navigation Language)是Struts2的默认表达式语言,用于在ValueStack中查找和操作对象属性,使得视图层的数据绑定变得更加简单。 Struts2还支持插件化开发,这使得它可以轻松地扩展功能,如国际...
ValueStack是Struts2中用于存储Action属性和ActionContext的容器。OGNL(Object-Graph Navigation Language)是Struts2的默认表达式语言,用于在Action、ValueStack和View之间传递数据。开发者可以通过OGNL方便地...
Struts2的配置文件通常是`struts.xml`,在这里定义Action、Interceptor和Result。比如,你可以定义一个Action,指定它的类、方法以及对应的结果页面。 4. **OGNL(Object-Graph Navigation Language)** Struts2...
ValueStack 对象在 Struts2 中扮演着非常重要的角色,它将属性值从一个拦截器传到了另一个拦截器(当然,在这其间,属性值可能改变),最后会传到 Action 对象,并将 ValueStack 对象中的属性的值终值赋给 Action 类...
##### 七、在struts.xml文件中,假如有一个package中没有配置namespace,那么在其中配置一个name为login的Action,它的result配置为<result>/login.jsp **答案解析:** - 在没有指定`namespace`的情况下,Action的...
Value Stack可以看作是一个存放数据的栈结构,它存储了Action中定义的所有数据以及请求处理过程中产生的数据。在Struts2中,Value Stack能够自动处理数据的存储和检索,使得开发者可以很轻松地在页面和后端代码之间...
ValueStack是Struts2中的一个核心组件,它是一个存储动作(Action)属性的对象栈。这个栈用于存放Ognl表达式可以访问的对象,使得视图层可以直接通过Ognl表达式获取或修改模型层的数据。在ValueStack中,最近被压入...
ValueStack是Struts2中对象容器,用于存放Action的属性,方便视图层直接访问。 在Struts2.3.4版本中,开发者可以利用注解来配置Action和Interceptor,大大减少了XML配置文件的复杂性。例如,@Action注解用于标记一...
每个Action实例都会有一个与之关联的ValueStack,用于存放Action的属性和结果对象。当Action被创建时,ValueStack也会被创建。 6. **Interceptor拦截器**:在Action执行前后,Struts2会调用一系列预定义或自定义的...
6. **ValueStack**:ValueStack是Struts2用来管理对象和数据的机制,它是一个栈结构,可以方便地将Action上下文中的属性暴露给视图层。 7. **OGNL(Object-Graph Navigation Language)**:Struts2使用OGNL作为...
1. **Action和Result**:在Struts2中,Action是业务逻辑处理的主要组件,而Result则是Action执行后的结果。Action与Result之间的映射可以通过配置文件或注解进行定义。 2. **拦截器(Interceptor)**:Struts2的一...
- **ValueStack**:值栈是Struts2用来存放Action属性和Ognl表达式的地方,便于视图层直接访问。 3. **配置与注解** - **Struts配置文件**:通常为struts.xml,用于定义Action、结果类型、拦截器链等。 - **注解...
在实际的项目中,通常会有如`src/main/java`存放源代码,`src/main/resources`存放配置文件,`Web-INF`目录下存放`web.xml`,`struts-config.xml`等,以及`WEB-INF/classes`和`WEB-INF/lib`分别存放编译后的类文件和...
8. **ValueStack**:它是一个对象栈,用于存放Action的属性和结果,方便OGNL表达式访问。 9. **Struts2配置**:XML配置文件(struts.xml)和注解配合使用,定义了Action、结果类型、拦截器栈等。 学习Struts 2.0.1...
5. **ValueStack**: 是Struts2中用来存放模型数据的数据结构,它将Action实例和其他对象置于栈中,方便视图层直接访问。通过OGNL(Object-Graph Navigation Language)表达式,可以在JSP页面中直接访问ValueStack中...
在Action类中,我们需要创建一个`File`或`FileItem`类型的属性来接收上传的文件,并在配置中启用文件上传。 1. **配置Struts2文件上传**: 在`struts.xml`配置文件中,我们需要添加`<constant>`标签,设置`struts....
5. **OGNL(Object-Graph Navigation Language)**:Struts2默认使用OGNL作为表达式语言,用于在Action和视图之间传递数据,比如在JSP页面中直接访问Action的属性。 6. **Action类**:每个Action类代表一个具体的...