在本次項目中,由于時間緊張直接使用DWR做Ajax請求!要求的是動態展示,那就需要使用DWR輪詢請求,但是需要做異常情況下的一些處理!
特別是DWR在遇到異常后,后臺不報錯,前臺也只提示一個 Error !如果是輪詢的話,那么就一直彈出 Error ,那誰收到了呀!
對于DWR異常的處理,網上一大片都是這樣說的,在DWR配置中增加一個轉換器,將異常轉換為一般異常,這樣在前臺就不是提示 Error,而是提示具體的錯誤!想著這樣也可以接受,所以我記一下是怎么配置的。
很簡單,在dwr.xml中增加一個轉換器:
<convert converter="bean" match="java.lang.StackTraceElement" />
<convert converter="exception" match="java.lang.Exception" />
這樣前臺就會提示一些具體的異常信息,但是不會提示棧的信息的。不然我會更受不了的!
其實對于我的請求來說,如果產生dwr異常,我不用做處理是最好的。因為在使用ajax前我會首先判斷網絡是否可用,然后在后臺把異常給處理好。所以要做的,就是處理掉dwr彈出提示內容!
要做到這個也不難,那就是得到 engine.js 文件,然后在引用dwr這個公共文件時引用自己的文件。
<script type='text/javascript' src='/dwr/dwr/engine.js'></script>
改為:
<script type='text/javascript' src='engine.js'></script>
然后查詢下這個文件里面做彈出的內容,把彈出給注釋了,就這么簡單:
就像下面一樣:
/**
* The default message handler.
* @see getahead.org/dwr/browser/engine/errors
*/
dwr.engine.defaultErrorHandler = function(message, ex) {
dwr.engine._debug("Error: " + ex.name + ", " + ex.message, true);
if (message == null || message == ""){} //alert("A server error has occured.");
// Ignore NS_ERROR_NOT_AVAILABLE if Mozilla is being narky
else if (message.indexOf("0x80040111") != -1) dwr.engine._debug(message);
else{} //alert(message);
};
這樣dwr就算異常,也不會進行提示的,但是主要自己處理后臺可能發生的異常就行了!