PreResultListener
2017-10-30 09:43
337 查看
有时候我们需要在Action执行完毕后而Result还没执行时做一些功能,就需要PreResultListener,这是一个监听器。要实现这个监听器首先就要有一个实现PreResultListener的类,在这个类里面去实现事件的处理
写一个类实现PreResultListener
这个类中有ActionInvocaiton对象,这个对象封装了Action运行所需要的数据,甚至可以通过它来执行Action
然后在Action的方法中注册这个监听器
当Action运行之后,监听器监听到相应的事件并执行相关的功能,之后才会执行Result
1.自己去实现异常的处理
然后通过这个返回的字符串去执行对应的Result
2.使用struts的异常机制
在<action>元素中设置<exception-mapping>元素,可以指定在方法抛出指定异常时跳到那个指定的页面
需要在struts.xml中去配置一下
exception属性指定的是一个Exception的全类名,如果Action的方法抛出的错误是这个Exception的实例或是其子类的实例,就会跳转到对应的result属性指定的结果。
如果<action>配置了<exception-mapping>元素时,则会按顺序寻找,直到找到第一个符合的exception-mapping元素,如果没有找到,则会交给web容器处理
上面写的<exception-mapping>只对本<action>有效,可以将这个<exception-mapping>做成全局映射。如果要做成全局映射,这个<exception-mapping>应该放在<global-exception-mappings>中,这个是<package的子元素,配置了<global-exception-mappings>就需要配置<global-results>,因为配置了异常处理之后就自然要配置处理后要去的页面
如果想在页面上显示错误信息,可以是使用struts2提供的标签
写一个类实现PreResultListener
public class MyPreResult implements PreResultListener{ @Override public void beforeResult(ActionInvocaiton actionInvocation, String result){ System.out.println("现在处理Result执行前的功能,result="+result); } }
这个类中有ActionInvocaiton对象,这个对象封装了Action运行所需要的数据,甚至可以通过它来执行Action
然后在Action的方法中注册这个监听器
public class firstAction extends ActionSupport { @Override public String execute() throws Exception { //注册监听器 ActionContext context = ActionContext.getContext(); MyPreResult pr = new MyPreResult(); context.getActionInvocation().addPreResultListener(pr); return SUCCESS; } }
当Action运行之后,监听器监听到相应的事件并执行相关的功能,之后才会执行Result
Struts2的异常映射
在struts2中有时遇到异常需要我们去处理,这里有两种处理异常的方式1.自己去实现异常的处理
public class firstAction extends ActionSupport { @Override public String execute() throws Exception { try{ int a = 5/0; }catch(Exception e){ e.printStackTrace(); return "catchError"; } return SUCCESS; }
然后通过这个返回的字符串去执行对应的Result
2.使用struts的异常机制
在<action>元素中设置<exception-mapping>元素,可以指定在方法抛出指定异常时跳到那个指定的页面
public class firstAction extends ActionSupport { @Override public String execute() throws Exception { int a = 5/0; return SUCCESS; } }
需要在struts.xml中去配置一下
<action name="xxx" class="xxx" method="execute"> <exception-mapping result="math-exception" exception="java.lang.ArithmeticException"> <exception-mapping result="math-exception" exception="java.lang.Exception"> <result name="math-exception">/error.jsp</result> <result>/welcome.jsp</result> </action>
exception属性指定的是一个Exception的全类名,如果Action的方法抛出的错误是这个Exception的实例或是其子类的实例,就会跳转到对应的result属性指定的结果。
如果<action>配置了<exception-mapping>元素时,则会按顺序寻找,直到找到第一个符合的exception-mapping元素,如果没有找到,则会交给web容器处理
上面写的<exception-mapping>只对本<action>有效,可以将这个<exception-mapping>做成全局映射。如果要做成全局映射,这个<exception-mapping>应该放在<global-exception-mappings>中,这个是<package的子元素,配置了<global-exception-mappings>就需要配置<global-results>,因为配置了异常处理之后就自然要配置处理后要去的页面
<package name="xx" extends="struts-default" namespace="/"> <global-results> <result name="math-exception">/error.jsp</result> </global-results> <global-exception-mappings> <exception-mapping result="math-exception" exception="java.lang.ArithmeticException"> <exception-mapping result="math-exception" exception="java.lang.Exception"> </global-exception-mappings> </package>
如果想在页面上显示错误信息,可以是使用struts2提供的标签
<s:property value="exception" /> 打印exception对象的例外消息 <s:property value="exceptionStack"> 打印exception对象的堆栈消息
相关文章推荐
- Struts2拦截器-PreResultListener
- Struts2.x 之 使用PreResultListener
- Struts 2 读书笔记-----使用PreResultListener
- 《研磨struts2》第五章 Result 之 5.6 PreResultListener
- Action的监听器——PreResultListener
- Struts 2 读书笔记-----使用PreResultListener
- struts2之PreResultListener(转)
- Struts 2 读书笔记-----使用PreResultListener
- Struts2使用PreResultListener
- Struts2-监听返回结果(PreResultListener)
- Struts2中使用PreResultListener来查看action与jsp执行
- Struts2拦截器(Interceptor) PreResultListener
- PreResultListener
- Struts2-学习笔记系列(7)-PreResultListener
- PreResultListener
- Struts 2 读书笔记-----使用PreResultListener
- Struts2拦截器-PreResultListener
- 3.7.10: 配置处理结果---使用PreResultListener
- Struts 2使用PreResultListener
- PreResultListener使用