struts2 PreResultListener实现回调


      开发interceptor的时候,了解action已经执行完毕而result还没有开始执行的时间点往往很重要的。譬如在异常处理方面就是如 此:在action处理的过程中,由于后台的处理,出现的异常很可能是系统异常;而在result处理的过程中,异常则可能出现在为用户呈现的页面的时 候,而不是由于系统问题。
下面给出了ExceptionInterceptor的代码,该interceptor会在result开始执行之前与 之后以不同的方式处理异常。在result开始执行之前,可以改变用于从action配置中查询result的返回码,而在webwork应用程序中,使 用Action.ERROR是一个常用的实践技巧:将Action.ERROR映射至向用户提示错误的页面。所以,需要捕获异常并返回 Action.ERROR。在result开始执行之后,来自interceptor的返回码就不再那样重要了,但是仍然可以获得由 beforeResult()方法回传给result code,并且可以返回它。在以下离子中需要注意的一点是:由于interceptor必须是无状态的,因此它为每一个ActionInvocation 创建一个新的ExceptionHandler,可以保存该ActionInvocation的状态。
ExceptionInterceptor:在result前后以不同的方式处理异常

开发interceptor的时候,了解action已经执行完毕而result还没有开始执行的时间点往往很重要的。譬如在异常处理方面就是如此:在action处理的过程中,由于后台的处理,出现的异常很可能是系统异常;而在result处理的过程中,异常则可能出现在为用户呈现的页面的时候,而不是由于系统问题。
下面给出了ExceptionInterceptor的代码,该interceptor会在result开始执行之前与之后以不同的方式处理异常。在result开始执行之前,可以改变用于从action配置中查询result的返回码,而在webwork应用程序中,使用Action.ERROR是一个常用的实践技巧:将Action.ERROR映射至向用户提示错误的页面。所以,需要捕获异常并返回 Action.ERROR。在result开始执行之后,来自interceptor的返回码就不再那样重要了,但是仍然可以获得由 beforeResult()方法回传给result code,并且可以返回它。在以下离子中需要注意的一点是:由于interceptor必须是无状态的,因此它为每一个ActionInvocation 创建一个新的ExceptionHandler,可以保存该ActionInvocation的状态。
ExceptionInterceptor:在result前后以不同的方式处理异常
/**
 * @filename ExceptionInterceptor.java
 * @author Rain_zhou
 * @version ExceptionInterceptor,下午01:05:50
 */
package com.founder.study.forum.interceptor;

import com.opensymphony.xwork.ActionInvocation;
import com.opensymphony.xwork.interceptor.Interceptor;

/**
 * @author Rain_zhou
 *
 */
public class ExceptionInterceptor implements Interceptor {

 /* (non-Javadoc)
  * @see com.opensymphony.xwork.interceptor.Interceptor#destroy()
  */
 public void destroy() {
  // TODO Auto-generated method stub

 }

 /* (non-Javadoc)
  * @see com.opensymphony.xwork.interceptor.Interceptor#init()
  */
 public void init() {
  // TODO Auto-generated method stub

 }

 /* (non-Javadoc)
  * @see com.opensymphony.xwork.interceptor.Interceptor#intercept(com.opensymphony.xwork.ActionInvocation)
  */
 public String intercept(ActionInvocation arg0) throws Exception {
  // TODO Auto-generated method stub
  ExceptionHandler handler=new ExceptionHandler(arg0);
  return handler.invoke();
 }

}

/**
 * @filename ExceptionHandler.java
 * @author Rain_zhou
 * @version ExceptionHandler,下午01:07:04
 */
package com.founder.study.forum.interceptor;

import com.founder.study.forum.helper.NoLimitException;
import com.opensymphony.xwork.Action;
import com.opensymphony.xwork.ActionInvocation;
import com.opensymphony.xwork.interceptor.PreResultListener;

/**
 * @author Rain_zhou
 *
 */
public class ExceptionHandler implements PreResultListener {

 private ActionInvocation invocation;
 private boolean beforeResult=true;
 private String result=Action.ERROR;
 
 public ExceptionHandler(ActionInvocation invocation){
  this.invocation=invocation;
  invocation.addPreResultListener(this);
 }
 
 String invoke(){
  try{
   result=invocation.invoke();
  }catch(Exception e){
   if(beforeResult){
    return Action.ERROR;
   }else{
    return result;
   }
  }
  return result;
 }
 /* (non-Javadoc)
  * @see com.opensymphony.xwork.interceptor.PreResultListener#beforeResult(com.opensymphony.xwork.ActionInvocation, Java.lang.String)
  */
 public void beforeResult(ActionInvocation arg0, String arg1) {
  // TODO Auto-generated method stub

  beforeResult=false;
  result=arg1;
 }

}

 
1.主要功能&触发时间
该监听器主要在action的execute方法执行完以后,result.execute()方法执行前调用。
接口如下

Java代码
  1. public   interface  PreResultListener {  
  2.     void  beforeResult(ActionInvocation invocation, String resultCode);  
  3. }

在DefaultActionInvocation对应的调用如下


   1. //判断是否还有拦截器未执行,如果还有则继续执行拦截器链  
   2. //这里通过把DefaultActionInvocation对象本身往后续拦截器中传递来实现interceptors这个interceptor的迭代。  
   3. if (interceptors.hasNext()) {  
   4.                 final InterceptorMapping interceptor = (InterceptorMapping) interceptors.next();  
   5.                 UtilTimerStack.profile("interceptor: "+interceptor.getName(),   
   6.                         new UtilTimerStack.ProfilingBlock<String>() {  
   7.                             public String doProfiling() throws Exception {  
   8.                                 resultCode = interceptor.getInterceptor().intercept(DefaultActionInvocation.this);  
   9.                                 return null;  
  10.                             }  
  11.                 });  
  12.             } else {  
  13.                            //所有拦截器执行完成调用action的执行方法。  
  14.                 resultCode = invokeActionOnly();  
  15.             }  
  16.   
  17.             // this is needed because the result will be executed, then control will return to the Interceptor, which will  
  18.             // return above and flow through again  
  19.                   //调用preResultListeners的内容  
  20.             if (!executed) {  
  21.                 if (preResultListeners != null) {  
  22.                     for (Iterator iterator = preResultListeners.iterator();  
  23.                         iterator.hasNext();) {  
  24.                         PreResultListener listener = (PreResultListener) iterator.next();  
  25.                           
  26.                         String _profileKey="preResultListener: ";  
  27.                         try {  
  28.                             UtilTimerStack.push(_profileKey);  
  29.                             listener.beforeResult(this, resultCode);  
  30.                         }  
  31.                         finally {  
  32.                             UtilTimerStack.pop(_profileKey);  
  33.                         }  
  34.                     }  
  35.                 }  
  36.   
  37.                 // now execute the result, if we're supposed to  
  38. //调用result.execute方法.  
  39.                 if (proxy.getExecuteResult()) {  
  40.                     executeResult();  
  41.                 }  
  42.   
  43.                 executed = true;  
  44.             }  

 


2.注册方法
通过调用 invocation.addPreResultListener具体代码如下(摘自struts2 docs)

Java代码
  1. public   class  MyAction  extends  ActionSupport {  
  2.      ...  
  3.      public  String execute()  throws  Exception {  
  4.          ActionInvocation invocation = ActionContext.getActionInvocation();  
  5.          invocation.addPreResultListener(new  PreResultListener() {  
  6.               public   void  beforeResult(ActionInvocation invocation,   
  7.                                        String resultCode) {  
  8.                   // perform operation necessary before Result execution   
  9.               }  
  10.          });  
  11.      }  
  12.      ...  
  13.   } 

数据科学助力大数据领域的航空安全分析 随着航空业的快速发展,航班数量不断增加,航空安全问题日益受到关注。大数据时代的到来,使得航空领域积累了大量的数据,包括飞行数据、维护数据、气象数据等。本文章的目的在于探讨如何运用数据科学的方法和技术,对这些大数据进行分析,以提高航空安全水平。范围涵盖了从数据收集、预处理到数据分析、模型构建和应用的整个流程。本文将按照以下结构进行组织:首先介绍数据科学和航空安全分析的核心概念以及它们之间的联系;接着阐述核心算法原理和具体操作步骤,并使用Python源代码进行详细说明; 阅读详情

相关推荐

Cadence学习之路(六)元器件封装绘制

使用Allegro PCB Designer绘制元器件封装

qq_46757048的博客 1万+

struts2配置result返回页面注意事项

1、在result映射配置中,在指定实际资源的位置时,可以使用绝对路径和相对路径。绝对路径以斜杠(/)开头,相对于当前web应用的上下文路径;相对路径不以斜杠(/)开头,相对于当前执行的action的路径。 如: &lt;action name="reg" class="com.dreamcms.struts.action.user.RegAction"&gt;   &lt;result na...

justdoit1024 405

别再混淆了!一文彻底搞懂STM32的BootROM、BootLoader和启动模式(附启动流程图)

本文深入解析STM32的启动机制,详细讲解BootROM、BootLoader与启动模式的区别与联系,并提供实战指南。通过清晰的启动流程图和配置示例,帮助开发者彻底理解STM32启动流程,解决常见的启动问题,提升嵌入式开发效率。

weixin_33728268的博客 538

Action的监听器——PreResultListener

这个监听器的作用是在执行完成Action后,在转发到其他Action或是显示结果之前,会调用这个类中的beforeResult()方法,以实现一些功能。通过invocation的addPreResultListener方法对监听器进行注册。 示例: 监听器类: package com.suo.listeners; import com.opensymphony.xwork2.Actio

成长的足迹 2024

极智AI | 谈谈为什么卷积加速更喜欢 NHWC Layout

本文主要讨论一下为什么卷积加速更加喜欢 NHWC 的数据排布。

极智视界 2970

PyRoki:机器人运动学优化库入门教程

PyRoki:模块化机器人运动学优化工具包 本文介绍了PyRoki,一个模块化、可扩展且跨平台的机器人运动学优化工具包。PyRoki通过统一变量和成本函数接口,简化了逆运动学、轨迹优化和运动重定向等任务的实现,支持CPU、GPU和TPU加速。实验表明,PyRoki在批量逆运动学任务中比现有GPU加速库cuRobo快1.4-1.7倍,且收敛误差更低。其模块化设计支持快速集成新成本函数,并通过交互式可视化工具优化参数配置。PyRoki开源发布,为机器人运动优化提供了灵活高效的解决方案。

机器人控制与仿真应用 1292

37.使用PreResultListener实现回调

转自:https://wenku.baidu.com/view/84fa86ae360cba1aa911da02.html 在进行本实例前请前复习:五.2自定义拦截器。因为PreResultListener对象一般是绑定在拦截器上使用。 下面我们新建struts2PreResultListener项目进行测试。 步骤一,建立类,实现PreResultListener接口,主要代码如下: p...

weixin_33889665的博客 168

Python教程:一文了解Python的深拷贝与浅拷贝

理解 Python 中的深拷贝(deep copy)和浅拷贝(shallow copy)是非常重要的,特别是在处理嵌套结构的数据时。让我们深入探讨这两个概念,并通过代码示例进行说明。

旦莫的博客 3968

Struts2框架学习之三:result返回结果

前言 Struts 2中的Result是作为返回结果的,时当一个action处理完之后返回字符串的结果码。框架可以根据这个返回的字符串,映射到指定的页面。result元素可以分为两部分:一是结果映射,一部分是返回结果类型。 结果映射 result有两个属性可以配置:name属性和type属性。其中的name属性主要用来指定资源的逻...

weixin_34187862的博客 598

【Bug已解决】codex: tool call timeout / Function execution exceeds limit — CodeX CLI 工具调用超时解决方案

CodeX CLI 工具调用超时(Bash/文件/MCP)的解决方案,含增加超时、拆分命令、后台运行、避免交互卡住与限制读取。

博客 4204

基于灰度区域生长算法的红外目标检测算法matlab仿真

基于灰度区域生长算法的红外目标检测算法是一种常用的红外目标检测技术。它通过对红外图像进行灰度区域生长,找到具有相似灰度值的像素区域来检测目标。在本文中,我们将详细介绍基于灰度区域生长算法的红外目标检测算法的原理、步骤和应用。一、原理灰度区域生长算法是一种基于像素相似性的区域分割算法。它通过对图像中具有相似灰度值的像素进行聚类,将它们组合成更大的区域。灰度区域生长算法通常包括以下步骤:1.初始化:选择一个种子点作为起始点,将其作为第一个区域的中心点。

平时工作较为繁忙,私信消息一般晚上回复,谢谢大家~~ 251

Struts2中Ajax调用Struts2回调JSON数据并解析

struts.xml核心文件中的写法为: <package name="default" namespace="/" extends="json-default"> <action name="myTest" class="cn.com.gjw.MyTest" method="test"> <result type="json"> ...

包包小公子的私人博客 352

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

PreResultListener使用

PreResultListener是一个监听器接口,可以在Action处理完之后,系统转入实际视图前被回调。 Struts2应用可以给Action、拦截器添加PreResultListener监听器,添加PreResultListener可以通过ActionInvocation的addPreResultListener()方法完成: // Action默认包含的控制逻...

weixin_30802273的博客 159

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Struts2拦截器-PreResultListener

PreResultListener拦截器是在action方法执行后,返回result之前执行的拦截器。package com.struts2.interceptor;import com.opensymphony.xwork2.ActionSupport;public class MyAction extends ActionSupport { /** * */

beckham 4330

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Struts2中PreResultListener的简单示例

PreResultListener是一个监听器接口,它可以在Action完成控制处理之后,系统转入实际的物理视图之前被回调。Struts2应用中可以在Action或拦截器添加PreResultListener监听器,添加监听器通过ActionInvocation的addPreResultListener方法完成。一旦为Action添加了PreResultListener监听器,该监听器就可以在应用

huey2672的专栏 939

Struts 2使用PreResultListener

PreResultListener是要给监听器接口,他可以在Action完成控制处理之后,系统转入实际的物理视图之间被回调。            Struts 2 可以由ActionInvocation的addPreResultListener()方法来完成。            Struts 2 可以由Action和拦截器添加PreResultListener监听器。当为Acti

◇″淡定。 528

struts2之PreResultListener

struts2可由action,拦截器添加PreResultListener监听器,这个监听器可以在转入实际物理视图前回调该监听器的beforeResult()方法。 action代码: [code="java"]package com.randy.com; import java.util.Date; import com.opensymphony.xwork2.Action...

fenglei12的博客 213

PreResultListener

有时候我们需要在Action执行完毕后而Result还没执行时做一些功能,就需要PreResultListener,这是一个监听器。要实现这个监听器首先就要有一个实现PreResultListener的类,在这个类里面去实现事件的处理 写一个类实现PreResultListener public class MyPreResult implements PreResultListener{

你只有攒了足够的云翳 才能造就一个美丽的黄昏 488

Struts2.X PreResultListener接口的使用

对于Struts2的PreResultListener接口,可以在

夜子的专栏 1361

Struts2-学习笔记系列(7)-PreResultListener

在action处理完成之后,系统转入实际的物理试图之间被回调。 Action,拦截器都可以添加该监听器。拦截器添加了该监听器后,该监听器会对该拦截器所有拦截的action其作用 1 public String execute() throws Exception { 2 3 ActionInvocation invocation = ActionContext...

dichangsi2813的博客 130

Struts 2 读书笔记-----使用PreResultListener

PreResultListener是要给监听器接口,他可以在Action完成控制处理之后,系统转入实际的物理视图之间被回调。 Struts 2 可以由ActionInvocation的addPreResultListener()方法来完成。 Struts 2 可以由Action和拦截器添加PreResultListener监听器。当为Action添加了改监听器,该监听器就可以再应用转入到实...

chenssy 的技术博客 309

《研磨struts2》第五章 Result 之 5.6 PreResultListener

5.6  PreResultListener 5.6.1  什么是PreResultListener 在实际开发当中,常常需要在Action执行完毕后,而Result还没有开始执行的时候,做一些功能处理,比如异常处理,那么该怎么做呢?        这就需要使用PreResultListener了。看名字就知道,这是一个“Listener”,也就是一个监听器,用来执行事件监听的。

技术至上--Timo 389
上一篇: DWR深入理解
下一篇: jquery this和$(this)
w3053_5fdf588
博客等级 码龄18年 0粉丝 32原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值