Action中的各种转发类型

 <action name="helloworld" class="cn.itcast.action.HelloWorld">
     <result >/WEB-INF/page/jello.jsp</result>
</action>

如果没有为action指定class,默认值为ActionSupport

如果没有指定method,默认值为execute

如果没有为result指定name属性,默认值为success

result配置类似与struts1中的forward,但struts2提供了多种结果的类型,常用类型有:dispatcher(默认值)、redirect(重定向)、redirectAction(重定向action)、plainText(以源码形式显示,一般用于需要显示技术网站显示源码)

1、dispatcher(转发)

public class HelloWorld {

	private String msg;

	public String getMessage() {
		return msg;
	}

	public String execute() {
		msg= "第一个Struts2例子";
		return "success";
	}

}

  

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Struts2例子</title>
</head>
<body>
   ${message}
</body>
</html>

  

前台获取的属性值,指的是getXxx()方法中的xxx,而不是定义的变量。

2、redirect(重定向)

<action name="helloworld" class="cn.itcast.action.HelloWorld">
   <result type="redirect">/hello.jsp?username=${username}</result>
</action>

重新发送请求,在struts2中,每发一次请求都会new一个新的action类,而struts1每次都使用同一个action类

在result中可以使用${属性名}表达式访问action中的属性,表达式里的属性名对应action中的属性,action中的属性指的是getXxx()方法中的xxx,而不是定义的变量。

public class HelloWorld {

	private String username;
	
	public String getUsername() {
		return username;
	}

	public void setUsername(String username) {
		this.username = username;
	}

	public String execute() {
		try {
			this.username = URLEncoder.encode("传智播客", "UTF-8");//汉字struts2会译成ISO8859-1的二进制格式,要想显示成汉字,就要进行编码
		} catch (UnsupportedEncodingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return "success";
	}

}

 形成的连接地址:

http://localhost:8080/structs2/hello.jsp?username=%E4%BC%A0%E6%99%BA%E6%92%AD%E5%AE%A2  前台显示汉字会乱码,所以进行如下操作。

1.<%@ page language="java" contentType="text/html; charset=UTF-8" import="java.util.*,java.net.URLDecoder"  
2.    pageEncoding="UTF-8"%>   
3.<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">   
4.<html>   
5.<head>   
6.<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">   
7.<title>Struts2例子</title>   
8.</head>   
9.<body>   
10.<!-- 获取汉字参数   
11.request.getParameter("username").getBytes("ISO8859-1") 获取汉字   
12.new String (request.getParameter("username").getBytes("ISO8859-1"),"UTF-8")  转成utf-8  
13.URLDecoder.decode(new String (request.getParameter("username").getBytes("ISO8859-1"),"UTF-8"),"UTF-8")   进行解码   
14. -->   
15.  <%=URLDecoder.decode(new String (request.getParameter("username").getBytes("ISO8859-1"),"UTF-8"),"UTF-8")  %>   
16. <br>   
17.<!--获取英文参数  此种方式获取汉字,会出现乱码-->   
18. ${param.username}   
19.</body>   
20.</html> 

   

3、redirectAction(重定向action)

同一包中:

   <action name="helloworld" class="cn.itcast.action.HelloWorld">
     <result type="redirect">/hello.jsp?username=${username}</result>
  </action>
   <!-- 重定向action -->
  <action name="redirectAction">
   <result type="redirectAction"> helloworld</result>
  </action>

不同包中:通过指定param实现

<package name="itcast" namespace="/test" extends="struts-default">

   <!-- 重定向action -->
  <action name="redirectAction">
   <result type="redirectAction">
    <param name="actionName">helloworld</param>
    <param name="namespace">/test123</param>
   </result>
  </action>
</package>

<package name="it" namespace="/test123" extends="struts-default">
  <action name="helloworld" class="cn.itcast.action.HelloWorld">
   <result>/WEB-INF/page/hello.jsp</result>
  </action>
</package>

4、plainText(以源码形式显示,一般用于需要显示技术网站显示源码)

<action name="plainText">
   <result type="plainText">
    <param name="location">/index.jsp</param>
    <param name="charset">UTF-8</param>
   </result>
</action>

另外说明一下全局视图,和为action 注入属性

全局视图:

<package name="itcast" namespace="/test" extends="base">

 <global-results>
   <result name="message">/WEB-INF/page/message.jsp</result>
 </global-results>

 <action name="manage" class="cn.itcast.action.HelloWorld"
   method="add">
 </action>
</package>

public class HelloWorld {
	
	public String add() {
		
	      return "message";
		
	}
}

这种方式只能在该包内的action可以调用全局视图,所以要对其进行更改。使用包继承。

<package name="base" extends="struts-default">
  <global-results>
   <result name="message">/WEB-INF/page/message.jsp</result>
  </global-results>
 </package>
 <package name="itcast" namespace="/test" extends="base">

  <action name="manage" class="cn.itcast.action.HelloWorld"
   method="add">
  </action>
 </package>

 <package name="it" namespace="/test123" extends="base">
  <action name="manage" class="cn.itcast.action.HelloWorld"
   method="add">
  </action>
 </package>

这样所有的包就都可以进行访问了。

action注入属性

<action name="list" class="cn.itcast.action.HelloWorld"
   method="execute">
     <param name="savePath">xxxxxx</param>
     <result name="success">/WEB-INF/page/hello.jsp</result>
</action>

public class HelloWorld {

	private String savePath;

	public String getSavePath() {
		return savePath;
	}

	public void setSavePath(String savePath) {
		this.savePath = savePath;
	}
	public String add() {
		
	    return "message";
		
	}
}

   

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Struts2例子</title>
</head>
<body>
 ${savePath }
</body>
</html>

  

猜你喜欢

转载自slnddd.iteye.com/blog/1766721
今日推荐