2010-08-11 34 views
3

我正在使用Struts 1.1的舊Web應用程序。爲了進行業務驗證(涉及多個表單屬性和調用後端服務的複雜驗證),我編寫了一個ActionForm實現,在ActionForm.validate方法上調用一系列驗證器。在Struts中處理異常1 ActionForm

驗證器鏈使用commons鏈實現。一切都很好,除非在ActionForm.validate中發生異常時,它不會被struts異常處理程序捕獲,而是會在屏幕上顯示堆棧跟蹤。 struts異常處理程序不能捕捉到

有沒有辦法避免頁面上的堆棧跟蹤並將異常傳播到struts異常處理程序?

謝謝

回答

1

也許最好驗證器不會拋出異常。驗證是檢查用戶輸入是否違反像minChars,maxChars,密碼強度/驗證,電子郵件語法正確性,isNumber等等的限制。如果驗證程序失敗,它應該只返回false - 從不拋出異常。請參閱http://struts.apache.org/1.2.4/userGuide/dev_validator.html

上的示例如果您的驗證程序調用後端函數......有錯誤 - 我認爲。驗證器應該只添加字段錯誤。

如果由於語法正確的輸入而導致錯誤(例如,登錄名的用戶名/密碼錯誤),那麼您的struts應用程序(您的操作)應該處理此操作並將操作錯誤返回給用戶。這可以通過在拋出異常時重定向到錯誤頁面(UserNotLoggedInException)來完成。

+0

我不想用業務驗證來污染Action方法。這就是從驗證鏈中調用的原因。異常不被Struts異常處理程序捕獲,但它們被web.xml中設置的錯誤頁面捕獲。感謝你的回答。 – 2011-07-22 16:29:37