1.在Struts2中,当有多个Action使用同一个结果集时,则可以使用全局结果集(GlobalResult),这样就不用在每一个使用同一个结果集的action里面都添加一个result,可以减少代码量,优化struts.xml配置文件,接下来将用一个很简单的小例子来介绍全局结果集。
2.首先,新建一个struts2项目,打开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">返回success</a></li>
<li><a href="user/user?type=2">返回error</a></li>
<li><a href="user/user?type=3">返回global 结果集</a></li>
<li><a href="other/other">other,继承user包</a></li>
</ol>
</body>
</html>
对应的struts.xml配置文件如下:
<package name="user" namespace="/user" extends="struts-default">
<global-results>
<result name="mainpage">/user_mainpage.jsp</result>
</global-results>
<action name="user" class="com.gk.UserAction">
<result name="success">/user_success.jsp</result>
<result name="error">/user_error.jsp</result>
</action>
</package>
action所对应的Action类,UserAction类,代码如下:
package com.gk;
import com.opensymphony.xwork2.ActionSupport;
public class UserAction extends ActionSupport{
private int type;
public int getType() {
return type;
}
public void setType(int type) {
this.type = type;
}
public String execute() {
if (type == 1) {
return "success";
} else if (type == 2) {
return "error";
} else {
return "mainpage";
}
}
}
其中UserAction类中返回的结果集有"mainpage",而在struts.xml配置文件中的user的action中并没有"mainpage"的result,在这时就会使用全局的结果集(global-result),这个结果集中有"mainpage"的result。
3.当其它不同的package需要使用这个全局的result时,则需要使用<package>这个标签中的extends属性来指定包含全局的package就可以了。
例如,有个OtherAction.java文件,代码如下:
package com.gk;
import com.opensymphony.xwork2.ActionSupport;
public class OtherAction extends ActionSupport{
public String execute(){
return "mainpage";
}
}
对应的struts.xml配置文件中的配置如下:
<package name="other" namespace="/other" extends="user">
<action name="other" class="com.gk.OtherAction">
<result>/other.jsp</result>
</action>
</package>
这时user这个package中的结果集就可以被other这个package中的action所使用了,并不会跳转到other.jsp页面去,而是跳转到全局结果集中的user_mainpage.jsp页面上去了。
4.接下来附上上面没有的代码,其中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">
<global-results>
<result name="mainpage">/user_mainpage.jsp</result>
</global-results>
<action name="user" class="com.gk.UserAction">
<result name="success">/user_success.jsp</result>
<result name="error">/user_error.jsp</result>
</action>
</package>
<package name="other" namespace="/other" extends="user">
<action name="other" class="com.gk.OtherAction">
<result>/other.jsp</result>
</action>
</package>
</struts>
user_success.jsp页面代码如下:
<%@ 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 '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>
返回成功
</body>
</html>
user_error.jsp页面代码如下:
<%@ 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 'user_error.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>
返回错误
</body>
</html>
user_mainpage.jsp页面代码如下:
<%@ 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 'user_mainpage.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>
返回主页面
</body>
</html>
other.jsp页面代码如下,根据配置文件,是不会跳转到这个页面的:
<%@ 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 'other.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>
其他页面
</body>
</html>
4.这个简单的小项目结构,如下图所示:
部署该项目到Tomcat服务器上,开启Tomcat服务器,运行后如下图所示:
分别点击上图中4个超链接,依次效果如下:
在本包内,返回全局结果集。
在其它包里,继承user包,返回全局结果集。
5.以上内容仅供大家学习参考,谢谢!