易网时代-编程资源站
Welcome
微信登录
编程资源
图片资源库
蚂蚁家优选
PDF转换器
首页
/
操作系统
/
Linux
/
struts2中页面取值的原理以及valueStack的应用
//获取封装输出信息的 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>
收藏该网址
版权所有©石家庄振强科技有限公司2024
冀ICP备08103738号-5
网站地图