<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    ALL is Well!

    敏捷是一條很長的路,摸索著前進著

      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      30 隨筆 :: 23 文章 :: 71 評論 :: 0 Trackbacks
    本文為原創(chuàng),歡迎轉(zhuǎn)載,轉(zhuǎn)載請注明出處BlogJava

    Struts2 版本 2.2.1
    Freemarker版本 2.3.16

    此統(tǒng)一處理的目的在于 Web層、Service層拋出的業(yè)務(wù)異常以統(tǒng)一的格式顯示在頁面的固定位置。

    首先定義我們的業(yè)務(wù)異常類。

    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 用于攔截異常,并在此統(tǒng)一處理
    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取得對應(yīng)message
                    
    // 實現(xiàn)略
                    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(
    "系統(tǒng)忙,請稍候再試。");
        }

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

    }

    攔截所有的異常,并對其進行處理。
    當為 自定義的BusinessException時,根據(jù)拋出異常時的msgCode,取得對應(yīng)的顯示信息。
    msgCode與顯示信息的對應(yīng)關(guān)系 可先配置好,系統(tǒng)啟動時將其緩存起來。

    如果非BusinessException,則統(tǒng)一顯示為 “系統(tǒng)忙,請稍候再試。”

    將要顯示的信息設(shè)置到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>

    在使用時,只要在頁面上想要展現(xiàn)異常信息的地方插入如下代碼即可:
    <#include "/msg.ftl">

    這樣 系統(tǒng)中的異常 將會被統(tǒng)一的顯示。

    當使用js做前臺的表單驗證的時候,提示用戶的輸入有問題,則可以使用 Message.showMsg('...'),提示信息也會顯示在同一個位置。

    這樣就實現(xiàn)了異常提示信息的統(tǒng)一展示了。

    這是一個比較簡易的實現(xiàn),只提供一個思路。

    posted on 2010-11-16 14:53 李 明 閱讀(2799) 評論(0)  編輯  收藏 所屬分類: Struts2Freemarker
    主站蜘蛛池模板: 成人人观看的免费毛片| 精品久久久久久亚洲| 一级黄色毛片免费看| 久久精品视频亚洲| 欧美最猛性xxxxx免费| 一出一进一爽一粗一大视频免费的| 亚洲国产美女精品久久久久∴| 国产大片免费网站不卡美女| 美女又黄又免费的视频| 亚洲国产最大av| 免费a级毛片无码av| 9277手机在线视频观看免费| 精品亚洲福利一区二区| 亚洲AV无码久久精品蜜桃| 日韩成人在线免费视频| 女人体1963午夜免费视频| 亚洲av色香蕉一区二区三区蜜桃| 亚洲人成影院在线无码按摩店| 国产成人免费爽爽爽视频| 久久er国产精品免费观看2| 久久精品国产精品亚洲人人 | 亚洲女初尝黑人巨高清| 在线视频精品免费| 黄色网址免费在线观看| 亚洲av伊人久久综合密臀性色| 毛色毛片免费观看| 野花香高清视频在线观看免费 | 蜜桃AV无码免费看永久| 久久www免费人成看国产片| 亚洲另类无码一区二区三区| 亚洲精品免费视频| 亚洲午夜精品久久久久久浪潮| 成年人在线免费看视频| 中文字幕在线免费| 国产黄在线观看免费观看不卡| 亚洲美国产亚洲AV| 久久狠狠爱亚洲综合影院| 亚洲国产日韩一区高清在线 | 亚洲av成人一区二区三区观看在线 | 亚洲AV永久无码区成人网站| 免费萌白酱国产一区二区|