2010-12-12 48 views
3

在我的應用程序(使用彈簧),重定向的請求,當異常拋出

我嘗試從視圖使用spring exposingBean調用方法。當我嘗試從視圖中調用一個方法時,它會拋出錯誤。我試圖趕上HandlerExceptionResolver,但沒有運氣,我認爲它不能由HandlerExceptionResolver處理,因爲異常沒有引發到控制器。

所以我嘗試另一種方式來重定向引發異常時的請求。我認爲方面有可能做到這一點。當從方面拋出異常時是否有可能重定向請求?

回答

4

正如你所說的,HandlerExceptionResolver將不會在視圖內引發異常時被調用。這些解析器非常針對控制器異常。

您的最佳選擇是使用HandlerInterceptor並覆蓋afterCompletion方法,該方法將包含視圖拋出的異常。您可以可能能夠從這裏發送重定向,取決於響應是否已被視圖提交。

我看不出方面會如何幫助你。不是這項工作的工具。

但是,我對你的建議是停止在你的JSP中使用暴露的bean。我意識到這很方便,但這是你使用它的麻煩。我建議你的控制器組裝視圖所需的所有數據,將其粘貼在模型中,並將其發送到視圖。這樣,視圖觸發異常的危險就更小了,因爲它已經擁有了它所需要的一切。

此外,如果您需要發送重定向,則您需要在視圖開始執行前之前執行此操作。否則,視圖層可能會在之前開始寫出HTTP響應標頭,引發異常。如果發生這種情況,那麼您將無法再發送重定向 - 響應是「已提交」。

+0

+1 - 視圖應該做可能會引發異常的事情。 – 2010-12-12 09:16:31

+0

@Stephen:我想你錯過了一個「不」在那裏的地方:) – skaffman 2010-12-12 09:17:38

+0

是的,我同意你,我意識到暴露的bean是春天scoped。和它的危險。但我仍然不知道如何將數據綁定到模型,並將在多個視圖中使用。任何建議?順便說一句,謝謝你的回答。 – 2010-12-12 09:46:34