程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> DWR調用遠程方法的錯誤和異常處理

DWR調用遠程方法的錯誤和異常處理

編輯:關於JAVA

記得以前通常我們在調用 DWR 的遠程方法是這樣寫

Remote.method(params,function(data){   
    //服務端執行後客戶端的邏輯,如   
    alert("服務端執行後返回的數據:"+data);   
});  
Remote.method(params,function(data){
    //服務端執行後客戶端的邏輯,如
    alert("服務端執行後返回的數據:"+data);
});

第一個至倒數第二個參數為客戶端傳向服務端的數據,最後一個參數直接就是一個回調函數。因為服務端根據 Java 對象生成的 js 代碼就是:

Remote.method = function(p0, callback) {
    dwr.engine._execute(Remote._path, 'Remote', 'method', p0, callback);
}

所以很直觀的把第二個參數理解為就是一個回調函數。當然要注意了,上面說的遠程方法都是一個參數,如果為多個參數的話,callback 總是最後一個參數,如:

Remote.method= function(p0, p1, callback) {
  dwr.engine._execute(Remote._path, 'Remote', 'method', p0, p1, callback);
}

你的 DWR 程序要是一切順利,那都好說,算你幸運;而要是碰到了遠程方法在處理你的請求時拋出了異常,你將會看到 DWR 只會給你一個 alert("Error") 簡單顯示錯了,而這是不夠的。所以你需要去琢磨如何主動捕獲種這一錯誤,更友好的展示給用戶。所以若碰到遠程調用的異常,你同樣是幸運的,因為又可以思考來學到一著。

那個 alert("Error") 其實是 DWR 的全局錯誤處理,可通過 dwr.engine.setErrorHandler(errorHandler) 來改變它的默認行為的,如

function errh(errorString, exception) {
    alert("提示你自定義的全局出錯信息。");
}

dwr.engine.setErrorHandler(errh);

也許我們很少這麼做,因為全局性的錯誤處理滿足不了個性化的遠程調用。我們可以把錯誤處理  errorHandler 寫在遠程調用的函數參數中。回頭看前面那個 callback,當它是一個函數時,就是個成功調用後的處理函數,它也可以是個包含幾個函數的對象,此時遠程調用就要這麼寫:

Remote.method(params,{   
        callback:function(data){ //調用成功時的處理函數   
            //服務端執行後客戶端的邏輯,如   
            alert("服務端執行後返回的數據:"+data);   
        },   
        errorHandler:function(errorString, exception) {//執行異常時   
            alert('修改 XXX 時出錯,請檢查 XXX 雲雲:'+ errorString)   
        }   
    }   
);  
Remote.method(params,{
  callback:function(data){ //調用成功時的處理函數
   //服務端執行後客戶端的邏輯,如
   alert("服務端執行後返回的數據:"+data);
  },
  errorHandler:function(errorString, exception) {//執行異常時
   alert('修改 XXX 時出錯,請檢查 XXX 雲雲:'+ errorString)
  }
 }
);

更深入的,callback 中不可以包括另外兩個函數屬性:exceptionHandler、warningHandler 和 textHtmlHandler。沒有 exceptionHandler 處理函數就會去應用 errorHandler 函數,並且如果在 callback 函數中的 js 出錯也會跑到 errorHandler 去執行的。詳細的用法請見:http://directwebremoting.org/dwr/other/errors.html。

再,還能在 dwr.xml 中配置有關異常的 convert,如:

<convert match="java.lang.Exception" converter="exception"/>

這樣你就能通過 errorHandler 的 errorString、exception 獲取更詳細的信息。有進一步的實際需求時再來深入。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved