2012-10-07 31 views
1

我環顧四周,看起來沒有解決。如果在我的網絡應用程序中,我的錯誤處理位發生了變化Web.xml錯誤頁面定義優先

<error-page> 
    <exception-type>javax.faces.ViewExpiredException</exception-type> 
    <location>/error.jsp</location> 
    </error-page> 
    <error-page> 
    <error-code>500</error-code> 
    <location>/error/maur_error.jsp</location> 
    </error-page> 

如何確定優先級?按出場順序?

編輯:請您仔細閱讀,有兩個錯誤頁面定義

+0

在一個單一的時間點,你可能會有一個異常或錯誤...你不能同時擁有兩個...所以沒有優先權的問題.. – Shurmajee

+0

不,你不被允許有一個''與兩個,沒有什麼阻止你有兩個處理類似條件 – kolossus

回答

0

如果你的servlet你做 'response.sendError(500)',用戶將看到error.jsp文件。相反,如果您'拋出新的MyException()',用戶將看到maur_error.jsp。這些是由2個不同頁面處理的2種不同情況。

500和Throwable的例子確實沒有多大意義。但在另一種情況下,例如AddressNotFoundException,SubscriptionExpiredException和401未授權的HTTP errror代碼(由應用程序服務器提供,而不是由應用程序提供),此映射使錯誤處理變得輕鬆。

+0

也許我的例子有點人爲的做法。我的意思是,如果有兩個錯誤條件,例如一個「ViewExpiredException」(通常會導致錯誤代碼爲「500」)的錯誤頁面,另一個錯誤頁面爲http狀態代碼「500」的另一個錯誤頁面def, - 頁面定義優先,因爲'ViewExpiredException'自然會產生一個'500'? – kolossus

+0

@kolossus,我認爲這種情況得到了回答。如果拋出ViewExpiredException,應用程序將進入 javax.faces.ViewExpiredException中定義的位置。如果您的應用程序執行response.sendError(500),則該應用程序將轉到由定義的位置。它們是由不同的處理程序處理的不同錯誤條件。優先問題在哪裏? –

0

你不應該有你的配置優先級的問題,所以ViewExpiredException應觸發重定向到/error.jsp和500 /error/maur_error.jsp exept如果你在你的XML其他錯誤條目。

例如我有一個類似的問題,以你(這麼ViewExpiredException - >錯誤的頁面),這是因爲我也有過這樣的條目

<error-page> 
    <exception-type>java.lang.Throwable</exception-type> 
    <location>/genericError.xhtml</location> 
</error-page> 

由於ViewExpiredException被包裹在一個更通用的例外,它是Throwable的入門全髖關節置換被觸發。

總之,如果你有一個頁面定義了500個錯誤頁面,請不要定義一般的異常頁面。這是不需要的,並會'吃'你的更具體的例外頁面。