1.在前面的拦截器中,对execute()方法执行之前和之后都有动作,都定义在拦截器interceptor()方法中,为了精确定义在execute()方法执行结束之后,再处理result执行的动作,Struts2提供了用于拦截结果的监听器,拦截结果监听器通过手动注册给拦截器。
2.首先定义 监听器 必须实现 PreResultListener
3.定义拦截器
action
struts.xml
--访问
http://localhost:8080/Struts2_PreResultListener/order.action
--控制台输出
execute()方法执行之前。。。。
拦截结果监听器执行。。。。
返回的视图结果为:success
execute()执行之后。。。。
2.首先定义 监听器 必须实现 PreResultListener
package com.sh.interceptor;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.PreResultListener;
public class ResultListener implements PreResultListener{
public void beforeResult(ActionInvocation invocation, String result) {
System.out.println("拦截结果监听器执行。。。。");
System.out.println("返回的视图结果为:"+result);
}
}
3.定义拦截器
package com.sh.interceptor;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
public class ResultInterceptor extends AbstractInterceptor {
@Override
public String intercept(ActionInvocation ai) throws Exception {
//注册自己定义的拦截结果监听器给拦截器
ai.addPreResultListener(new ResultListener());
System.out.println("execute()方法执行之前。。。。");
String result=ai.invoke();
System.out.println("execute()执行之后。。。。");
return result;
}
}
action
package com.sh.action;
import com.opensymphony.xwork2.ActionSupport;
public class OrderAction extends ActionSupport{
public String execute(){
return SUCCESS;
}
}
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> <!-- 如果 注解的action配置改变时候不需要重新启动tomcate --> <constant name="struts.devMode" value="false"/> <constant name="struts.convention.classes.reload" value="true" /> <package name="default" extends="struts-default"> <interceptors> <interceptor name="resultInterceptor" class="com.sh.interceptor.ResultInterceptor"/> </interceptors> <action name="order" class="com.sh.action.OrderAction"> <result>/index.jsp</result> <interceptor-ref name="defaultStack"/> <interceptor-ref name="resultInterceptor"/> </action> </package> </struts>
--访问
http://localhost:8080/Struts2_PreResultListener/order.action
--控制台输出
execute()方法执行之前。。。。
拦截结果监听器执行。。。。
返回的视图结果为:success
execute()执行之后。。。。