Struts2-关于struts.xml文件的result配置的说明

一、result说明:

一个result代表了一个可能的输出。当action类的方法执行完后,会返回一个字符串,Struts2框架根据这个字符串去匹配该action下的result,然后像用户输出视图(也可以是重定向,接下来会讲)。

二、result的配置:

result元素的属性
属性是否必须说明
name指定result的逻辑名
type指定result的类型,不同类型的result代表了不同类型的结果输出
<package name="default" extends="struts-default">
	<action name="login" class="com.struts2.action.UserAction" method="login">
		<result name="success" type="dispatcher">/index.jsp</result>
		<result name="input" type="dispatcher">/login.jsp</result>
	</action>
</package>

1、name属性:

在之前的关于struts.xml文件的action配置的说明中有说明com.opensymphony.xwork2.Action接口中定义了5个字符串常量(结果视图):

public static final String SUCCESS = "success";     // 数据处理成功 (成功页面)
public static final String NONE = "none";    //页面不跳转  return null; 效果一样,常用于ajax请求时
public static final String ERROR = "error";    //数据处理发送错误 (错误页面)
public static final String INPUT = "input";    //用户输入数据有误,通常用于表单数据校验 (输入页面)

public static final String LOGIN = "login";    //主要权限认证不通过 (登陆页面)

这个5个常量分别相应地对应着开发中常遇到的结果视图。

name属性可以省略,默认是success(和action中method属性省略默认就是execute()方法一样)。当然,除了这5种视图,Struts2允许定义任意的视图名。在action类中的方法中,方法的返回结果必须是一个字符串,即开发人员在方法中可以返回任意的字符串,并且在result元素的name属性中匹配上即可。

public String login() {
	if("zhangsan".equals(username) && "123456".equals(password)){
		return SUCCESS;
	}
	return INPUT;
}

2、结果类型:

在调用action类对请求进行处理后,就要向用户显示一个结果视图,这些视图由不同的结果类型来管理的。在Struts2中,可以通过实现com.opensymphony.xwork2.Result接口以表明是结果类型。在Struts2中预定了多种结果类型:

Struts2预定的结果类型
结果类型说明
chain用于action的链式处理
dispatcher用于web资源的集成,包括jsp的集成
freemaker用于freemaker的集成
httpheader用于控制特殊的http行为
redirect用于重定向到另外的URL(web资源)
redirectAction用于重定向到另外的action映射
stream用于向浏览器返回一个InputStream
xslt用于XML/XSLT集成
painText用于显示某个特定页面(如jsp/HTML)的原始内容(即页面源代码)
上述的结果类型在struts2-core-2.3.15.1.jar/struts-default.xml中进行的声明。

一般开发中常用的就这几个:chain、dispatcher、redirect、redirectAction、stream。下面对这几个结果类型进行讲解用法:

(1)chain:它也相当于请求转发。它一般情况下用于从一个action跳转到另一个action。

<package name="default" extends="struts-default">
	<action name="login" class="com.struts2.action.UserAction" method="login">
		<result name="success" type="dispatcher">/index.jsp</result>
		<result name="input" type="chain">
			<param name="actionName">test</param>
			<param name="namespace">/aaa</param>
		</result>
	</action>
</package>
<package name="/aaa" namespace="/aaa" extends="struts-default">
	<action name="test" class="com.struts2.action.TestAction">
		<result type="dispatcher">/test.jsp</result>
	</action>
</package>

如上代码所示,如果用户访问localhost://struts2_test01/login.action得到的字符串结果是"input",则将跳转到命/aaa/test.action下的execute方法,即将请求转发至TestAction类的execute方法进行处理。

注:上面的代码中,因为是跨namespace进行请求转发,所以需要在<result>元素中进行进一步的详细指定actionName和namespace,如果是转发到同一个namespace,则直接<result name="input" type="chain">/login</result>即可。

(2)dispatcher:它代表的是请求转发,也是默认值。它一般用于从action跳转到页面(jsp),这个是result的默认值。

<action name="test" class="com.struts2.action.TestAction">
	<result type="dispatcher">/test.jsp</result>
</action>

(3)redirect:它代表的是重定向  它一般用于从action跳转到页面

<package name="default" extends="struts-default">
	<action name="login" class="com.struts2.action.UserAction" method="login">
		<result name="success" type="dispatcher">/index.jsp</result>
		<result name="input" type="redirect">/login.jsp</result>
	</action>
</package>

上面的代码中,如果login.action执行结果返回的字符串是"input",则Struts2框架会告诉浏览器(重定向)去访问localhost://struts2_test01/login,jsp,实现了重定向(浏览器地址会改变成:localhost://struts2_test01/login.jsp)。其中不能重定向到action,如果需要重定向到action,使用redirectAction即可。

(4)redirectAction:它代表的是重定向  它一般用于从action跳转另一个action。

<package name="default" extends="struts-default">
	<action name="login" class="com.struts2.action.UserAction" method="login">
		<result name="success" type="dispatcher">/index.jsp</result>
		<result name="input" type="redirectAction">
			<param name="actionName">test</param>
			<param name="namespace">/aaa</param>
		</result>
	</action>
</package>
<package name="/aaa" namespace="/aaa" extends="struts-default">
	<action name="test" class="com.struts2.action.TestAction">
		<result type="dispatcher">/test.jsp</result>
	</action>
</package>

上面的代码中,如果login.action执行结果返回的字符串是"input",则Struts2框架会告诉浏览器(重定向)去访问localhost://struts2_test01/aaa/test.action,实现了重定向(浏览器地址会改变成:localhost://struts2_test01/aaa/test.action)。其中不能重定向到jsp,只能是action,如果需要重定向到jsp,使用redirect即可。

(5)stream:代表的是服务器端返回的是一个流,一般用于下载。如:验证码的小图片等。不过也不太常用。





  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值