Struts2笔记三之Result

Struts2笔记三之Result

1、struts.xml中action返回值result
1)result类型:
a). dispatcher forward,这个跳转必须是页面,不能是action,服务器端跳转
b). redirect 重定向,这个跳转必须是页面,不能是action,客户端跳转
c). chain forward到一个action,服务器端跳转
d). redirectAction 重定向,客户端跳转到另一个action,客户端跳转
e). stream 下载
服务器端跳转:页面上显示的是action地址,因为用户根本就不知道后台已经将请求转移到另外一个页面,后台自动跳转到新的url地址,浏览器仅请求一次
客户端跳转:页面上显示的是一个新的页面地址,用户可以明显知道跳转到另一个页面去了,后台告诉浏览器去访问一个新的url地址,所以redirect发了两次请求


2、在一个package中可以定义一个<global-results>,这个package中任何一个action返回的result只要与其对应,都会跳到这个global-result中对应的页面去
这里可以定义一个声明式Exception,在Action方法上抛出意思,在global捕获该异常,只要有该异常就返回一个返回值如:

	<global-exception-mappings>
		<exception-mappings result="globalError" exception="java.lang.Exception"></exception-mappings>
	</global-exception-mappings>
	<global-results>
		<result name="globalError">/error.jsp</result>
	</global-results>
这个最好定义在一个公共的package中,并且在这个package中定义一下公共内容,让其他package去extends这个package最好。


3、动态页面

	package name="user" namespace="/user" extends="struts-default">
	    <action name="user" class="com.edifier.struts2.user.action.UserAction">
	    	<result>${r}</result><!-- 这里的${r}是访问值栈里的r,这个不是el表达式,而是struts.xml中专门用来访问值栈的表达式 -->
	    </action>	    
    </package>
public class UserAction extends ActionSupport {
	private int type;	
	private String r;//用来保存动态页面地址
	public void setR(String r) {
		this.r = r;
	}
	public void setType(int type) {
		this.type = type;
	}
	@Override
	public String execute() {
		if(type == 1) r="/user_success.jsp";
		else if (type == 2) r="/user_error.jsp";
		return "success";
	}
}

当请求为localhost:8081/Struts2Demo/user/user?type=1时,最后跳转的页面是user_success.jsp
当请求为localhost:8081/Struts2Demo/user/user?type=2时,最后跳转的页面是user_error.jsp


4、在用redirect的时候,会丢失request中的值,所以会需要重新传递参数。
public class UserAction extends ActionSupport {
	private int type;
	public void setType(int type) {
		this.type = type;
	}
	@Override
	public String execute() throws Exception {
		return "success";
	}
}
    <package name="user" namespace="/user" extends="struts-default">
	    <action name="user" class="com.edifier.struts2.user.action.UserAction">
	    	<result type="redirect">/user_success.jsp?t=${type}</result><!-- 这里将type换一个名字重新传递到页面上去 -->
	    </action>	    
    </package>

页面要接收需要: from actioncontext: <s:property value="#parameters.t"/>
如果是两个action之间传参在例如:执行完action1之后要直接跳转到action2,并且action1要传一些参数给action2,在struts.xml文件中的配置如下:
<action name="action1" method="" class="">
<result name="success" type="chain">
<param name="actionName">action2</param>
<param name="param1">${param1}</param>
<param name="param2">${param2}</param>
</result>               
</action>   
注意:
     1. 若param1和param2是两个变量,那么在两个action中都要有他们的getter和setter
     2. 若param1是常量,那么在action1中只要有一个param1的getter,在action2中要有param1的getter和setter    


如果在两个action之间直接跳转而不用传参数,struts.xml文件可以和上面一样,只是没有param标签,还可以使用如下配置:
    <action name="action1" method="" class="">
        <result name="success" type="redirectAction">action2.action</result>               
    </action>
即可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值