1,一次请求,不管经过多少个Action,都只有一个值栈。所以如果客户端向Aaction发出请求,struts.xml执行服务器端跳转,Aaction跳转到Baction,那么Aaction和Baction是共享一个值栈的,所以这两个Action定义的属性可以互相使用,不用传参数。
2,但是如果客户端向Aaction发出请求,struts.xml执行客户端跳转即redirect时,就是两次请求了,那么就需要传递参数了。
小例子:
struts.xml:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<constant name="struts.devMode" value="true" />
<constant name="struts.i18n.encoding" value="GBK"></constant>
<package name="user" namespace="/user" extends="struts-default">
<action name="user" class="com.awei.struts2.action.UserAction">
<result type="redirect">/user_success.jsp?t=${type}</result>
</action>
</package>
<!-- Add packages here -->
</struts>
com.awei.struts2.action.UserAction:
package com.awei.struts2.action;
import com.opensymphony.xwork2.ActionSupport;
public class UserAction extends ActionSupport{
private String type;
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String execute(){
return SUCCESS;
}
}
index.jsp:
<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>
<%
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>
<<a href="user/user?type=3">进入</a><br>
</body>
</html>
重点:user_success.jsp
<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>
<%@ 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>
from ValueStack:<s:property value="t"/>
from ActionContext:<s:property value="#parameters.t"/>
<s:debug></s:debug>
</body>
</html>
显示结果:
from ValueStack: from ActionContext:3
Struts ValueStack Debug
Value Stack Contents
Object | Property Name | Property Value |
---|---|---|
com.opensymphony.xwork2.DefaultTextProvider | texts | null |
Stack Context
These items are available using the #key notationKey | Value |
---|---|
com.opensymphony.xwork2.dispatcher.HttpServletRequest | org.apache.struts2.dispatcher.StrutsRequestWrapper@6c137c |
application | {org.apache.tomcat.InstanceManager=org.apache.catalina.core.DefaultInstanceManager@16b352c, org.apache.catalina.resources=org.apache.naming.resources.ProxyDirContext@1ad0d89, org.apache.catalina.jsp_classpath=/F:/java/apache-tomcat-7.0.28/webapps/Struts2_0700_ResultWithParameter/WEB-INF/classes/;/F:/java/apache-tomcat-7.0.28/webapps/Struts2_0700_ResultWithParameter/WEB-INF/lib/commons-fileupload-1.2.1.jar;/F:/java/apache-tomcat-7.0.28/webapps/Struts2_0700_ResultWithParameter/WEB-INF/lib/commons-io-1.3.2.jar;/F:/java/apache-tomcat-7.0.28/webapps/Struts2_0700_ResultWithParameter/WEB-INF/lib/commons-logging-1.0.4.jar;/F:/java/apache-tomcat-7.0.28/webapps/Struts2_0700_ResultWithParameter/WEB-INF/lib/freemarker-2.3.15.jar;/F:/java/apache-tomcat-7.0.28/webapps/Struts2_0700_ResultWithParameter/WEB-INF/lib/jsf-api.jar;/F:/java/apache-tomcat-7.0.28/webapps/Struts2_0700_ResultWithParameter/WEB-INF/lib/jsf-impl.jar;/F:/java/apache-tomcat-7.0.28/webapps/Struts2_0700_ResultWithParameter/WEB-INF/lib/jstl-1.2.jar;/F:/java/apache-tomcat-7.0.28/webapps/Struts2_0700_ResultWithParameter/WEB-INF/lib/ognl-2.7.3.jar;/F:/java/apache-tomcat-7.0.28/webapps/Struts2_0700_ResultWithParameter/WEB-INF/lib/struts2-core-2.1.8.1.jar;/F:/java/apache-tomcat-7.0.28/webapps/Struts2_0700_ResultWithParameter/WEB-INF/lib/xwork-core-2.1.6.jar;/F:/java/apache-tomcat-7.0.28/lib/;/F:/java/apache-tomcat-7.0.28/lib/activation.jar;/F:/java/apache-tomcat-7.0.28/lib/annotations-api.jar;/F:/java/apache-tomcat-7.0.28/lib/catalina-ant.jar;/F:/java/apache-tomcat-7.0.28/lib/catalina-ha.jar;/F:/java/apache-tomcat-7.0.28/lib/catalina-tribes.jar;/F:/java/apache-tomcat-7.0.28/lib/catalina.jar;/F:/java/apache-tomcat-7.0.28/lib/dom4j-1.6.1.jar;/F:/java/apache-tomcat-7.0.28/lib/ecj-3.7.2.jar;/F:/java/apache-tomcat-7.0.28/lib/el-api.jar;/F:/java/apache-tomcat-7.0.28/lib/jasper-el.jar;/F:/java/apache-tomcat-7.0.28/lib/jasper.jar;/F:/java/apache-tomcat-7.0.28/lib/jsmartcom_zh_CN.jar;/F:/java/apache-tomcat-7.0.28/lib/jsp-api.jar;/F:/java/apache-tomcat-7.0.28/lib/mail.jar;/F:/java/apache-tomcat-7.0.28/lib/servlet-api.jar;/F:/java/apache-tomcat-7.0.28/lib/tomcat-api.jar;/F:/java/apache-tomcat-7.0.28/lib/tomcat-coyote.jar;/F:/java/apache-tomcat-7.0.28/lib/tomcat-dbcp.jar;/F:/java/apache-tomcat-7.0.28/lib/tomcat-i18n-es.jar;/F:/java/apache-tomcat-7.0.28/lib/tomcat-i18n-fr.jar;/F:/java/apache-tomcat-7.0.28/lib/tomcat-i18n-ja.jar;/F:/java/apache-tomcat-7.0.28/lib/tomcat-jdbc.jar;/F:/java/apache-tomcat-7.0.28/lib/tomcat-util.jar;/F:/java/apache-tomcat-7.0.28/lib/xunzai.com_mysql-connector-java-5.1.7-bin.jar;/F:/java/apache-tomcat-7.0.28/bin/tomcat-juli.jar;/F:/java/apache-tomcat-7.0.28/bin/bootstrap.jar;/F:/各种软件/jdk/开发环境/lib/tools.jar;/F:/java/jarPackage/commons-lang-2.4.jar;/F:/各种软件/jdk/开发环境/jre/lib/ext/commons-fileupload-1.2.2.jar;/F:/各种软件/jdk/开发环境/jre/lib/ext/commons-io-2.2-javadoc.jar;/F:/各种软件/jdk/开发环境/jre/lib/ext/commons-io-2.2-sources.jar;/F:/各种软件/jdk/开发环境/jre/lib/ext/commons-io-2.2-test-sources.jar;/F:/各种软件/jdk/开发环境/jre/lib/ext/commons-io-2.2-tests.jar;/F:/各种软件/jdk/开发环境/jre/lib/ext/commons-io-2.2.jar;/F:/各种软件/jdk/开发环境/jre/lib/ext/dnsns.jar;/F:/各种软件/jdk/开发环境/jre/lib/ext/localedata.jar;/F:/各种软件/jdk/开发环境/jre/lib/ext/servlet-api.jar;/F:/各种软件/jdk/开发环境/jre/lib/ext/sunjce_provider.jar;/F:/各种软件/jdk/开发环境/jre/lib/ext/sunmscapi.jar;/F:/各种软件/jdk/开发环境/jre/lib/ext/sunpkcs11.jar, com.sun.faces.config.WebConfiguration=com.sun.faces.config.WebConfiguration@4276fd, org.apache.jasper.compiler.TldLocationsCache=org.apache.jasper.compiler.TldLocationsCache@cef147, org.apache.jasper.runtime.JspApplicationContextImpl=org.apache.jasper.runtime.JspApplicationContextImpl@15a4a77, org.apache.tomcat.JarScanner=org.apache.tomcat.util.scan.StandardJarScanner@53bbfa, freemarker.Configuration=freemarker.template.Configuration@16feee5, javax.servlet.context.tempdir=F:\java\apache-tomcat-7.0.28\work\Catalina\localhost\Struts2_0700_ResultWithParameter} |
com.opensymphony.xwork2.ActionContext.locale | zh_CN |
com.opensymphony.xwork2.dispatcher.HttpServletResponse | org.apache.catalina.connector.ResponseFacade@13d4c49 |
current.property.path | null |
com.opensymphony.xwork2.ActionContext.application | {org.apache.tomcat.InstanceManager=org.apache.catalina.core.DefaultInstanceManager@16b352c, org.apache.catalina.resources=org.apache.naming.resources.ProxyDirContext@1ad0d89, org.apache.catalina.jsp_classpath=/F:/java/apache-tomcat-7.0.28/webapps/Struts2_0700_ResultWithParameter/WEB-INF/classes/;/F:/java/apache-tomcat-7.0.28/webapps/Struts2_0700_ResultWithParameter/WEB-INF/lib/commons-fileupload-1.2.1.jar;/F:/java/apache-tomcat-7.0.28/webapps/Struts2_0700_ResultWithParameter/WEB-INF/lib/commons-io-1.3.2.jar;/F:/java/apache-tomcat-7.0.28/webapps/Struts2_0700_ResultWithParameter/WEB-INF/lib/commons-logging-1.0.4.jar;/F:/java/apache-tomcat-7.0.28/webapps/Struts2_0700_ResultWithParameter/WEB-INF/lib/freemarker-2.3.15.jar;/F:/java/apache-tomcat-7.0.28/webapps/Struts2_0700_ResultWithParameter/WEB-INF/lib/jsf-api.jar;/F:/java/apache-tomcat-7.0.28/webapps/Struts2_0700_ResultWithParameter/WEB-INF/lib/jsf-impl.jar;/F:/java/apache-tomcat-7.0.28/webapps/Struts2_0700_ResultWithParameter/WEB-INF/lib/jstl-1.2.jar;/F:/java/apache-tomcat-7.0.28/webapps/Struts2_0700_ResultWithParameter/WEB-INF/lib/ognl-2.7.3.jar;/F:/java/apache-tomcat-7.0.28/webapps/Struts2_0700_ResultWithParameter/WEB-INF/lib/struts2-core-2.1.8.1.jar;/F:/java/apache-tomcat-7.0.28/webapps/Struts2_0700_ResultWithParameter/WEB-INF/lib/xwork-core-2.1.6.jar;/F:/java/apache-tomcat-7.0.28/lib/;/F:/java/apache-tomcat-7.0.28/lib/activation.jar;/F:/java/apache-tomcat-7.0.28/lib/annotations-api.jar;/F:/java/apache-tomcat-7.0.28/lib/catalina-ant.jar;/F:/java/apache-tomcat-7.0.28/lib/catalina-ha.jar;/F:/java/apache-tomcat-7.0.28/lib/catalina-tribes.jar;/F:/java/apache-tomcat-7.0.28/lib/catalina.jar;/F:/java/apache-tomcat-7.0.28/lib/dom4j-1.6.1.jar;/F:/java/apache-tomcat-7.0.28/lib/ecj-3.7.2.jar;/F:/java/apache-tomcat-7.0.28/lib/el-api.jar;/F:/java/apache-tomcat-7.0.28/lib/jasper-el.jar;/F:/java/apache-tomcat-7.0.28/lib/jasper.jar;/F:/java/apache-tomcat-7.0.28/lib/jsmartcom_zh_CN.jar;/F:/java/apache-tomcat-7.0.28/lib/jsp-api.jar;/F:/java/apache-tomcat-7.0.28/lib/mail.jar;/F:/java/apache-tomcat-7.0.28/lib/servlet-api.jar;/F:/java/apache-tomcat-7.0.28/lib/tomcat-api.jar;/F:/java/apache-tomcat-7.0.28/lib/tomcat-coyote.jar;/F:/java/apache-tomcat-7.0.28/lib/tomcat-dbcp.jar;/F:/java/apache-tomcat-7.0.28/lib/tomcat-i18n-es.jar;/F:/java/apache-tomcat-7.0.28/lib/tomcat-i18n-fr.jar;/F:/java/apache-tomcat-7.0.28/lib/tomcat-i18n-ja.jar;/F:/java/apache-tomcat-7.0.28/lib/tomcat-jdbc.jar;/F:/java/apache-tomcat-7.0.28/lib/tomcat-util.jar;/F:/java/apache-tomcat-7.0.28/lib/xunzai.com_mysql-connector-java-5.1.7-bin.jar;/F:/java/apache-tomcat-7.0.28/bin/tomcat-juli.jar;/F:/java/apache-tomcat-7.0.28/bin/bootstrap.jar;/F:/各种软件/jdk/开发环境/lib/tools.jar;/F:/java/jarPackage/commons-lang-2.4.jar;/F:/各种软件/jdk/开发环境/jre/lib/ext/commons-fileupload-1.2.2.jar;/F:/各种软件/jdk/开发环境/jre/lib/ext/commons-io-2.2-javadoc.jar;/F:/各种软件/jdk/开发环境/jre/lib/ext/commons-io-2.2-sources.jar;/F:/各种软件/jdk/开发环境/jre/lib/ext/commons-io-2.2-test-sources.jar;/F:/各种软件/jdk/开发环境/jre/lib/ext/commons-io-2.2-tests.jar;/F:/各种软件/jdk/开发环境/jre/lib/ext/commons-io-2.2.jar;/F:/各种软件/jdk/开发环境/jre/lib/ext/dnsns.jar;/F:/各种软件/jdk/开发环境/jre/lib/ext/localedata.jar;/F:/各种软件/jdk/开发环境/jre/lib/ext/servlet-api.jar;/F:/各种软件/jdk/开发环境/jre/lib/ext/sunjce_provider.jar;/F:/各种软件/jdk/开发环境/jre/lib/ext/sunmscapi.jar;/F:/各种软件/jdk/开发环境/jre/lib/ext/sunpkcs11.jar, com.sun.faces.config.WebConfiguration=com.sun.faces.config.WebConfiguration@4276fd, org.apache.jasper.compiler.TldLocationsCache=org.apache.jasper.compiler.TldLocationsCache@cef147, org.apache.jasper.runtime.JspApplicationContextImpl=org.apache.jasper.runtime.JspApplicationContextImpl@15a4a77, org.apache.tomcat.JarScanner=org.apache.tomcat.util.scan.StandardJarScanner@53bbfa, freemarker.Configuration=freemarker.template.Configuration@16feee5, javax.servlet.context.tempdir=F:\java\apache-tomcat-7.0.28\work\Catalina\localhost\Struts2_0700_ResultWithParameter} |
last.property.accessed | null |
__component_stack | [org.apache.struts2.components.Debug@18df055] |
attr | org.apache.struts2.util.AttributeMap@19d96b1 |
com.opensymphony.xwork2.dispatcher.ServletContext | org.apache.catalina.core.ApplicationContextFacade@1767553 |
com.opensymphony.xwork2.ActionContext.container | com.opensymphony.xwork2.inject.ContainerImpl@369fdc |
com.opensymphony.xwork2.ActionContext.session | {} |
com.opensymphony.xwork2.dispatcher.PageContext | org.apache.jasper.runtime.PageContextImpl@1961a84 |
session | {} |
com.opensymphony.xwork2.util.ValueStack.ValueStack | com.opensymphony.xwork2.ognl.OgnlValueStack@15a3a92 |
__requestWrapper.getAttribute | false |
last.bean.accessed | null |
request | {.freemarker.RequestParameters=freemarker.ext.servlet.HttpRequestParametersHashModel@1a550f9, struts.valueStack=com.opensymphony.xwork2.ognl.OgnlValueStack@15a3a92, __cleanup_recursion_counter=1, .freemarker.Request=freemarker.ext.servlet.HttpRequestHashModel@bb5859} |
parameters | {t=[Ljava.lang.String;@6745b9} |
com.opensymphony.xwork2.ActionContext.parameters | {t=[Ljava.lang.String;@6745b9} |
__link | [Ljava.lang.Object;@128340 |
从上图中可以看出来,<s:property value="t"/>是无效的,而且从valuestack中可以看出根本没有t和type的属性。但是可以从stack context中看到有parameters,可以用These items are available using the #key notation 来取得:即<s:property value="#parameters.t"/>