struts2结果集原理和自定义结果集 如果result标签中写了其他内容该怎么写跳转页面

常用的结果集类型:

1.dispather:转发到某个页面(默认)

2.chain:转发到某个action,多个action的链式结构。(如果需要用户填写的信息分好多个页面,但是又不想一个页面提交后立即保存,而是所有页面都填写完的时候再一起保存,这时候就需要用chain。多个action都存在于值桟中)

3.redirect:重定向到一个页面

4.redirectAction:重定向到一个动作名称

5.plainText:以村文本的形式输出jsp页面内容(显示源码)


<?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" />
    <!-- 1.redirect -->
    <package name="xxc1" namespace="/testRedirect" extends="struts-default">
    	<action name="testRedirect">
    		<result type="redirect" name="success">/testRedirect.jsp</result>
    	</action>
    </package>
    <!-- 2.chain 转发到当前包下的action-->
    <package name="xxc2" namespace="/testChain_current" extends="struts-default">
    	<action name="testChain">
    		<result type="chain" name="success">a2</result>
    	</action>
    	<action name="a2">
    		<result type="dispatcher" name="success">/testChain.jsp</result>
    	</action>
    </package>
    
    
    <!-- 3.chain 转发到其他包下的action-->
    <package name="xxc0" namespace="/other" extends="struts-default">
    	<action name="a2">
    		<result type="dispatcher" name="success">/testChain_other.jsp</result>
    	</action>
    </package>
    <package name="xxc3" namespace="/testChain_other" extends="struts-default">
    	<action name="testChain">
    		<!--
    			 <result type="chain" name="success">/other/a2</result>   这样写是错误的,因为标签里的内容struts2把它当作一个action的name属性来看待
    			  以下两种方式是同一个意思
    			 <result type="chain" name="success">a2</result>
    			 <result type="chain" name="success">
    				<param name="actionName">a2</param>
    			 </result>
    		-->
    		<!-- 转发到另一个包下的action -->
    		<result type="chain" name="success">
    			<param name="namespace">/other</param><!-- prarm标签里的name属性,去对应的结果集的类中去看属性(必须要有set方法) -->
    			<param name="actionName">a2</param>
    		</result>
    	</action>
    </package>
    
    <!-- 4.redirectAction 重定向到一个action   也可以重定向不同包下的action,参照3-->
    <package name="xxc4" namespace="/testRedirectAction" extends="struts-default">
		<action name="testRedirectAction1">
			<result type="redirectAction" name="success">testRedirectAction2</result>
		</action>
		<action name="testRedirectAction2">
			<result type="dispatcher" name="success">/testRedirectAction.jsp</result>
		</action>
    </package>
    
    <!-- 5.plainText  将网页的源码展现出来 ,转发-->
    <package name="xxc5" namespace="/testPlainText" extends="struts-default">
		<action name="testPlainText">
			<result type="plainText" name="success">/testPlainText.jsp</result>
		</action>
    </package>
</struts>


1.从上图可以看出,如果要定义结果集就必须实现Result接口。

2.如果要跳转到<result>中定义的结果页面中,就需要继承StrutsResultSupport抽象类,因为这个类中的execute方法中有获取<result>标签中定义的结果页面名称的操作。

3.如果不需要跳转到<result>标签中指定的结果页面,那么只要直接继承Result接口即可。



自定义结果集:

/**
 * 继承StrutsResultSupport表示需要获取<result>标签中的内容
 */
public class MyResult extends StrutsResultSupport {
	//这个属性在struts.xml中可以通过<result>中的<param name="name">xxc</param>进行赋值
	private String name;

	protected void doExecute(String finalLocation, ActionInvocation invocation) throws Exception {//finalLocation表示result标签中的内容
		System.out.println(name);
		HttpServletRequest request = ServletActionContext.getRequest();
		HttpServletResponse response = ServletActionContext.getResponse();
		RequestDispatcher dispatcher = request.getRequestDispatcher(finalLocation);
		dispatcher.forward(request, response);
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

}


测试Action:

public class TestMyResultAction extends ActionSupport {
	public String execute(){
		return "myResult";
	}
}

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>
	<!-- 自定义结果集配置 -->
	<package name="myResult" namespace="/" extends="struts-default">
		<result-types>
			<result-type name="myResult" class="com.xxc.myResult.MyResult"></result-type>
		</result-types>
	</package>
	<!-- 测试action,这里需要继承自定义结果集所在的包,这样才有了自定义结果集的跳转方法 -->
	<package name="testMyResult" namespace="/" extends="myResult">
		<action name="testMyResult" class="com.xxc.myResult.TestMyResultAction">
			<!-- 
				<result name="myResult">index.jsp</result>
			 -->
			<result type="myResult" name="myResult"><!-- 注意:这里的type写自定义的结果集的name -->
				<!-- 
					StrutsResultSupport抽象类中的有location属性
					在execute方法中,通过conditionalParse对location属性的解析获得lastFinalLocation
					lastFinalLocation = conditionalParse(location, invocation);
					所以这里写param name="location"  index.jsp相当于给StrutsResultSupport抽象类中的
					location属性赋值,之为index.jsp
				 -->
				<param name="location">index.jsp</param>
				<param name="name">xxc</param>
			</result>
		</action>
	</package>
</struts>


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值