有的时候,before拦截和after拦截对我们来说是不够的,因为我们需要在Action执行完之后,但是还没有回到视图层之前,做一些事情。Struts2同样支持这样的拦截,这种拦截方式,是通过在拦截器中注册一个PreResultListener的接口来实现的。
指定Action的EXECUTE()方法中添加代码如下:
@Override
public String execute() throws Exception {
ActionInvocation actionInvocation = ActionContext.getContext().getActionInvocation();
actionInvocation.addPreResultListener(new PreResultListener(){
@Override
public void beforeResult(ActionInvocation arg0, String arg1) {
System.out.println("brefor return view");
}
});
System.out.println("execute");
return SUCCESS;
}
自定义拦截器添加的代码:
@Override
public String intercept(ActionInvocation arg0) throws Exception {
// TODO Auto-generated method stub
System.out.println("begin_1");
String result = arg0.invoke();
System.out.println("end_1");
return result;
}
<%System.out.println("this view"); %>
通过输出结果可以很明显的看出运行流程
interceptor的begin_1 之后进行验证输出validate,execute方法中输出execute在返回页面之前,进行
beforeResult(ActionInvocation arg0, String arg1)
的方法调用输出
befor return view
---> 跳转到指定界面后,输出指定的字符串
this view
--> interceptor 的
end_1
如果本文章对你有一点点的帮助,请回复给予支持,谢谢!
BY:Uckyk.K