`
tianhandigeng
  • 浏览: 374417 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

基于Struts2和freemarker的异常提示信息的统一处理

 
阅读更多

public   abstract   class  BaseException  extends  RuntimeException  {
    
private   static   final   long  serialVersionUID  =   - 6765360320533958383L ;

    
private  String messageCode;

    
public  String getMessageCode()  {
        
return  messageCode;
    }


    
public   void  setMessageCode(String messageCode)  {
        
this .messageCode  =  messageCode;
    }


    
public  BaseException()  {
        
super ();
    }


    
public  BaseException(String message)  {
        
super (message);
    }


    
public  BaseException(String message, Throwable cause)  {
        
super (message, cause);
    }


    
public  BaseException(Throwable cause)  {
        
super (cause);
    }


    
public  BaseException(String messageCode, String message)  {
        
super (message);
        setMessageCode(messageCode);

    }


    
public  BaseException(String messageCode, String message, Throwable cause)  {
        
super (message, cause);
        setMessageCode(messageCode);
    }


public   class  BusinessException  extends  BaseException  {

    
private   static   final   long  serialVersionUID  =   - 1657938434382769721L ;
                   
    
public  BusinessException()  {
        
super ();
    }

    
    
public  BusinessException(String message, Throwable cause)  {
        
super (message, cause);
    }

    
    
public  BusinessException(Throwable cause)  {
        
super (cause);
    }

    
    
public  BusinessException(String messageCode, String message)  {
        
super (messageCode, message);
        setMessageCode(messageCode);
    }

    
    
public  BusinessException(String messageCode, String message, Throwable cause)  {
        
super (messageCode, message, cause);
        setMessageCode(messageCode);
    }

}



拦截器类:ErrorHandlingInterceptor.java 用于拦截异常,并在此统一处理
public   class  ErrorHandlingInterceptor  extends  AbstractInterceptor  {

    
private   static   final   long  serialVersionUID  =   1L ;

    @Override
    
public  String intercept(ActionInvocation invocation)  throws  Exception  {
        
try   {
            
return  invocation.invoke();
        }
  catch  (Exception e)  {
            e.printStackTrace();
            handleException(e);
        }

        
return  Action.INPUT;
    }

    
    
/** */ /**
     * 处理异常
     * 
@param  e
     
*/

    
private   void  handleException(Exception e)  {
        
boolean  handled  =   false ;
        Throwable throwEx 
=  e;
        
while  (throwEx  !=   null {
            
if (throwEx  instanceof  BusinessException)  {
                BusinessException be 
=  (BusinessException)throwEx;
                String errorCode 
=  be.getMessageCode();
                
                
//  从缓存中通过ErrorCode取得对应message
                
//  实现略
                String errorMsg  =  getMessage(errorCode);
                
                
//  页面显示错误提示信息
                fillError4Display(errorMsg);
                handled 
=   true ;
            }
 
            throwEx 
=  throwEx.getCause();
        }

        
        
if ( ! handled)  {
            fillDefaultError();
        }

    }

    
    
private  HttpServletRequest getRequest()  {
        
return  (HttpServletRequest)ActionContext.getContext().get(StrutsStatics.HTTP_REQUEST);
    }

    
    
private   void  fillDefaultError()  {
        fillError4Display(
" 系统忙,请稍候再试。 " );
    }

    
    
private   void  fillError4Display(String msg)  {
        getRequest().setAttribute(
" _error_msg_ " , msg);
    }

}

拦截所有的异常,并对其进行处理。
当为 自定义的BusinessException时,根据抛出异常时的msgCode,取得对应的显示信息。
msgCode与显示信息的对应关系 可先配置好,系统启动时将其缓存起来。

如果非BusinessException,则统一显示为 “系统忙,请稍候再试。”

将要显示的信息设置到Request中,下面来看看Freemarker模板的写法:

msg.ftl

< div  id ='_err_msg_div' >
    
< #if  Request['_error_msg_']?exists >
        ${Request['_error_msg_']}
    
</ #if >
</ div >

< script  type ="text/javascript" >
if  ( ! this .Message)  {
    
this .Message  =   {} ;
    (
function ()  {
        
/**/ /* *
         * show client message
         
*/

        Message.showMsg 
=   function (msg)  {
            document.getElementById(
" _err_msg_div " ).innerHTML  =  msg;
        }
;
    }
)();
}
;
</ script >

在使用时,只要在页面上想要展现异常信息的地方插入如下代码即可:
< #include  "/msg.ftl" >

这样 系统中的异常 将会被统一的显示。

当使用js做前台的表单验证的时候,提示用户的输入有问题,则可以使用 Message.showMsg('...'),提示信息也会显示在同一个位置。

这样就实现了异常提示信息的统一展示了。

这是一个比较简易的实现,只提供一个思路。

0
0
分享到:
评论

相关推荐

    Struts2实用ppt

    通过全局异常映射,可以统一处理不同类型的应用程序异常,并返回相应的错误页面或提示信息。 在安全方面,Struts2集成了许多安全插件,如S2-005、S2-016等安全漏洞的修复,以及防止XSS、CSRF等攻击的防护措施。 ...

    struts2实战.pdf 中文完整版

    4. **异常处理**:通过配置,Struts2可以捕获和处理各种运行时异常,提供统一的错误页面和提示信息。 5. **AJAX支持**:Struts2提供了内置的AJAX支持,使得异步更新页面变得更加简单。 6. **RESTful风格的支持**:...

    struts2登陆注册系统

    Struts2框架提供了异常处理机制,可以帮助开发者统一处理可能出现的问题,提供友好的错误提示信息。 10. **视图层设计**: 视图层通常使用JSP(JavaServer Pages)或FreeMarker模板技术来创建动态网页。这些页面会...

    Struts2入门教程(全新完整版)

    org.apache.struts2.views.freemarker.FreemarkerResult 16 httpheader 16 控制特殊http行为的结果类型 16 org.apache.struts2.dispatcher.HttpHeaderResult 16 stream 16 向浏览器发送InputSream对象,通常用来处理...

    Struts 2初体验

    同时,框架提供了全局异常处理机制,可以统一处理未捕获的异常,提供友好的错误提示。 **7. 模板技术与拦截器** Struts 2支持FreeMarker、Velocity等模板技术,可以灵活地定制视图。拦截器是Struts 2的一个重要特性...

    struts2--之二

    7. **异常处理**:Struts2提供了全局的异常处理机制,可以统一处理应用程序中抛出的异常,并根据异常类型返回不同的错误页面或提示信息。 8. **国际化(i18n)**:Struts2支持多语言环境,通过资源配置文件,可以...

    struts2的基本知识

    Struts2提供了全局异常处理机制,可以捕获并处理Action执行过程中抛出的异常,统一返回错误页面或提示信息。 **10. 国际化** Struts2支持多语言,通过资源包(properties文件)可以轻松实现应用的国际化。 以上...

    struts2 与hibernate整合

    3. 错误处理:Struts2 的拦截器可以捕获和处理由Hibernate引发的异常,提供统一的错误提示。 4. 性能优化:通过合理配置,可以利用缓存机制提高性能,例如二级缓存和查询缓存。 四、整合步骤 1. 添加依赖:在项目的...

    struts2 教程 CHM格式

    7. **异常处理**:Struts2提供了全局和Action级别的异常处理机制,允许开发者定义不同类型的异常对应的动作或结果,以实现统一的错误处理。 8. **国际化(i18n)**:Struts2支持多语言环境,通过资源文件管理不同...

    ralasafe and struts2

    5. **处理异常**:当RalaSafe检测到无权访问时,应捕获异常并重定向到合适的错误页面或提示信息。 ### 安全实践 在实际应用中,RalaSafe和Struts2结合使用可以帮助开发者: 1. **实现细粒度的访问控制**:通过...

    Struts2文档

    6. **异常处理**:Struts2提供了全局的异常处理机制,允许开发者定义特定类型的异常映射到特定的结果,从而实现统一的错误页面或消息提示。 7. **国际化与本地化**:Struts2支持多语言,通过资源文件可以轻松实现...

    struts-2.5.20-min-lib.zip

    Struts2是一个基于MVC(Model-View-Controller)设计模式的Java web应用程序框架,它极大地简化了Java web开发过程。Struts2的核心是Action,它处理来自客户端的请求,并通过Result来展示响应。在本压缩包"struts-...

    struts2.18 src

    10. **异常处理**:Struts2提供了统一的异常处理机制,可以捕获并处理应用程序中的异常,提供了更友好的错误提示。 通过深入学习Struts2.18的源码,开发者不仅可以理解框架的工作原理,还能根据实际需求进行定制和...

    Struts2.2.4.1完整资源包

    8. **异常处理**:Struts2提供了统一的异常处理机制,允许开发者自定义错误页面和处理策略。 9. **生命周期管理**:了解Action实例的生命周期,以及何时创建和销毁,这对于性能优化和内存管理至关重要。 10. **...

    struts2环境配置[借鉴].pdf

    7. **错误处理和国际化**:Struts2允许你通过配置文件定义全局错误消息和异常处理器,这使得错误信息的显示更加统一。此外,通过使用资源文件,可以轻松实现应用的国际化和本地化。 8. **部署与测试**:完成上述...

    struts驱动包

    6. **异常处理**:通过配置全局异常处理,Struts2可以捕获并处理Action执行过程中出现的异常,统一返回错误页面或提示信息。 7. **国际化与本地化**:Struts2支持多语言环境,可以通过资源文件轻松实现应用的国际化...

    Struts购物网站

    7. **异常处理**:通过全局的Exception Handler,可以统一处理应用程序中的异常,提供友好的错误提示界面。 8. **数据库交互**:通常结合DAO(Data Access Object)模式,使用Hibernate或iBatis等持久层框架进行...

    struts-crud.rar

    Struts2支持全局异常处理,可以通过配置文件定义一个全局的ExceptionMappingInterceptor,或者在Action类中抛出特定的异常,然后在JSP页面中统一处理。 8. **安全性考虑** 实现CRUD操作时,还需要注意安全性问题。...

    自定义拦截器(实现异常处理+细颗粒权限控制).zip

    在Struts2中,我们可以自定义拦截器来捕获和处理异常。这样,我们可以在一个中心位置统一管理所有可能出现的异常,而不是在每个Action类中单独处理。这不仅提高了代码的可维护性,也使得错误消息的呈现更加规范。...

    struts电子商城

    5. **异常处理**:通过配置全局异常处理,可以统一管理可能出现的运行时错误,提供友好的错误提示页面。 **SQL2000数据库** SQL Server 2000是微软推出的关系型数据库管理系统,广泛应用于企业级应用。在这个电商...

Global site tag (gtag.js) - Google Analytics