对于Struts2的PreResultListener接口,可以在执行Action之后,返回结果集之前执行某些动作,如图所示的位置
创建一个普通类,继承PreResultListener接口,并实现接口的beforeResult方法
TestPreResultListener.java
package com.struts.listener;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.PreResultListener;
public class TestPreResultListener implements PreResultListener{
@Override
public void beforeResult(ActionInvocation arg0, String arg1) {
// TODO Auto-generated method stub
System.out.println("返回结果集之前执行brforeResult");
}
}
之后在需要引用该类操作的拦截器中调用ActionInvocation.addPreResultListener();方法
UserInterceptor1.java
package com.struts.interceptor;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
import com.opensymphony.xwork2.interceptor.MethodFilterInterceptor;
import com.struts.listener.TestPreResultListener;
public class UserInterceptor1 extends MethodFilterInterceptor{
// 继承MethodFilterInterceptor使用的方法
@Override
protected String doIntercept(ActionInvocation invocation) throws Exception {
// TODO Auto-generated method stub
invocation.addPreResultListener(new TestPreResultListener());
System.out.println("执行拦截器UserInterceptor1之前");
String retult = invocation.invoke();
System.out.println("执行拦截器UserInterceptor1之后");
return retult;
}
}
运行结果:
执行拦截器UserInterceptor1之前
添加用户!
返回结果集之前执行brforeResult
执行拦截器UserInterceptor1之后