環境:dwr3+jsp
在開發中,我實在不希望dwr彈出alter,只需要列印錯誤記錄檔就可以,用戶端不需要alert出error或者a server error has occurred. 這樣的提示,更不需要alert出堆棧資訊,客戶根本看不懂,也不需要看。怎麼辦?
經過分析,engine.js中有dwr的預設錯誤控制代碼,defaultErrorHandler,如果使用者沒有定義errorhandler,就會把defaultErrorHandler賦給errorhandler。那我們就寫一個js覆蓋errorhandle就可以。
js內容如下:
dwr.engine._errorHandler = function(message, ex) {dwr.engine._debug("Error: " + ex.name + ", " + ex.message, true);};
只有上面一句話,上這個js引入到需要加入的頁面中,dwr服務端出了錯,只會列印日誌,不會alter了。
使用ajax的dwr架構彈出error對話方塊
在SSH架構中,使用ajax的dwr架構彈出error對話方塊,容易出現這種情況。這是錯誤的統一提示,但是這樣的提示不夠友好,並不知道錯誤詳細情況,可以在dwr.xml的設定檔<allow>結點內添加如下代碼
view source
print?
1 |
<ALLOW> |
2 |
<CONVERTconverter="bean"match="java.lang.StackTraceElement"/> |
3 |
<CONVERTconverter="exception"match="java.lang.Exception"/> |
4 |
</ALLOW> |
這一樣來可以列印出錯誤詳情,這時通常會彈出"a server error has occured"提示框,一般這種情況是由於javascript在調用java方法時,這時商務邏輯層biz/service)並非由spring產生,所以這時的商務邏輯層無法被注入資料訪問層(通用dao),有兩種解決方案:
一:你可以重新new一個spring設定檔對象 applicationContext;或是在javascript要的訪問的java方法中寫上自己的資料訪問實現
二:把"bean"改"spring",表明不是自己建立,而是由spring建立
view source
print?
1 |
<ALLOW> |
2 |
<CONVERTconverter="spring"match="java.lang.StackTraceElement"/> |
3 |
<CONVERTconverter="exception"match="java.lang.Exception"/> |
4 |
</ALLOW> |