2012-01-09 127 views
1

我有一個自定義視圖解析器和一個異常解析器。 當控制器代碼拋出異常時,將調用異常解析器並將異常映射到帶錯誤消息的視圖上。處理從自定義視圖解析器拋出的異常

但是,當我從其中一個視圖解析程序拋出異常時,它會傳播到應用程序服務器,並且不會使用註冊的異常解析程序解析。

我想這會發生是因爲異常解析器是'下面'視圖解析器,因爲它返回的視圖必須解析...所以異常從視圖解析器被拋出外面......但我仍然不知道如何處理以精心設計的方式處理這種情況。

請建議。

回答

1

通常,當異常解析器處理從控制器拋出的異常時,它將返回視圖名稱,以便可以呈現錯誤頁面。

所以如果一個視圖解析器拋出一個異常,你可以用它做什麼有意義的事情?最終必須以某種方式渲染錯誤,但是誰將解析該視圖,如果不是視圖解析器本身?

要回答你的問題,我不知道任何機制來捕捉視圖解析器拋出的異常,而不是標準的servlet容器機制。如果你的視圖解析器中有錯誤條件,我建議你(a)修復它們(如果它們是錯誤的),或者(b)在內捕獲視圖解析器的異常,並渲染顯示錯誤的不同視圖。

+0

謝謝@skaffman的回覆。我確實需要ViewResolver中的一個異常處理程序,因爲它正在渲染一些Google Closure模板,並且可能會拋出一些異常,以防模板的某些渲染失敗或無法在某處找到模板。您可以建議一種渲染方式ViewResolver本身內部的不同視圖? – schhajed 2012-01-09 08:47:32

+0

@schhajed:那麼你是說異常是從視圖本身引發的,而不是視圖解析器?視圖解析器不渲染視圖,他們只是將視圖名稱轉換爲'View'對象,然後將其分別渲染。 – skaffman 2012-01-09 09:26:24

+0

是的,在我的情況下,View本身可以拋出異常,因爲** View **正在呈現Google Closure模板對象,如果沒有提供正確的輸入,則可能會失敗。請建議。 – schhajed 2012-01-09 11:22:02