码迷,mamicode.com
首页 > 其他好文 > 详细

Struts2中带参数的结果集

时间:2015-04-01 13:27:43      阅读:182      评论:0      收藏:0      [点我收藏+]

标签:struts2   结果集传参   result   

1.在Struts2中带参数的结果集,即向结果集传参。struts2中有转发和重定向到某个视图,其中转发的过程在服务端完成,这个过程共享一个value stack(值栈),客户端并不知道页面跳转到了哪个jsp页面,其地址栏中显示的是所请求的action地址;在这个转发的过程中,参数值是共享的。其中重定向的话,服务器收到请求后,发现需要重定向,然后把需要重新访问的请求地址发给客户端,客户端重新发起请求,这个过程中,客户端知道自己访问的jsp页面的具体地址,其地址栏显示的是jsp页面的实际地址,并且不会共享value stack(值栈),如果要共享一个值,就必须带上参数,所以接下来将用一个例子介绍如何向结果集传参数。

注:服务器转发共享一个值栈,客户端跳转则不共享值栈。



2.首先,新建一个struts2项目,项目名为ResultParam,打开index.jsp页面,修改编码格式为utf-8,添加一个超链接,用于向结果集传参数,完整代码如下:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'index.jsp' starting page</title>
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->
  </head>
  
  <body>
	<ol>
	<li><a href="user/user?type=1">传递参数</a></li>
	</ol>
  </body>
</html>


相应的struts.xml配置文件的配置如下:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>

	<constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>
	<constant name="struts.devMode" value="true"></constant>
	<package name="user" namespace="/user" extends="struts-default">	
		<action name="user" class="com.gk.UserAction">
			<result type="redirect">/user_success.jsp?t=${type}</result>
		</action>
	</package>
</struts>


接着新建一个Action类,为UserAction类,用来指定一个成员变量type,添加set和get方法,并添加一个默认的execute方法,返回类型为String,返回"success"的话就重定向到/user_success.jsp?t=${type}页面上去,UserAction类代码如下:

package com.gk;

public class UserAction {
	private int type;

	public int getType() {
		return type;
	}

	public void setType(int type) {
		this.type = type;
	}

	public String execute() {
		return "success";
	}
}

当我们点击index.jsp页面下的传递参数超链接时,执行Action后,已经将Action的成员属性写入了值堆栈了,因此可以在配置文件中使用OGNL表达式${type}取出type的值,所以当result重定向到/user_success.jsp?t=${type}时,在地址栏上面是可以显示出index.jsp页面中的type=1这个值。

但是只有Action才具有值堆栈的,对于JSP页面来说是没有什么值堆栈的。因为在result重新定向到/user_success.jsp?t=${type}后,是不能从值堆栈中取出t的值,只能从ActionContext里取出t的值,即Action的上下文环境中取出,就可以在jsp页面中读取出t的值了,可以使用ActionContext Stack的parameters参数读取。


user_success.jsp页面代码如下:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ taglib uri="/struts-tags"  prefix="s"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'user_success.jsp' starting page</title>
    
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->

  </head>
  
  <body>
    返回成功
    来自值栈:<s:property value="t"/><br/>
    来自ActionContext:<s:property value="#parameters.t"/><br/>
    
    <s:debug></s:debug>
  </body>
</html>
注:<s:property value="t"/>取不到值,因为jsp不是一个Action没有值堆栈。
<s:property value="#parameters.t"/>可以取出t的值,因为#方式是从ActionContext中取属性值。ActionContext堆栈中具有parameters这个属性是用于存储传入的参数。所以可以取出。

等一会我们可以看下value stack(值栈)里的东西和ActionContext(Action的上下文环境)里面的东西。



3.接着我们部署这个项目到Tomcat服务器上,开启Tomcat服务器,输入相应的地址,运行结果如下:

技术分享


点击传递参数超链接后,如下图所示:

技术分享

其中重定向时传递了type这个参数,并从ActionContext中获取到了t的值,值栈中却获取不到,接着我们点击Debug按钮,看下里面的内容:

技术分享

其中值栈里面没有t的相关内容,我们可以看下栈的上下文,即Stack Context,也是ActionContext里的内容,先附上这个东西的介绍:

技术分享

栈的上下文环境,这些选项要使用#key的形式初始化。

在user_success.jsp页面中,使用#parameters.t的形式取得t的值,我们可以去找下有无parameters这个key,并且内容究竟有没有t:

技术分享

上图中有parameters这个key,并且里面也有一个t,在红色框框的下面,ActionContext堆栈中具有parameters这个属性是用于存储传入的参数。所以可以取出。


4.以上内容仅供大家爱学习参考,谢谢!



Struts2中带参数的结果集

标签:struts2   结果集传参   result   

原文地址:http://blog.csdn.net/u012561176/article/details/44803435

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!