2013-03-04 65 views
1

FullAjacExceptionHandler只能捕獲javax.el.E​​LException或java.lang.Throwable。 Throwable也優先於javax.el.E​​LException。我需要顯式捕獲託管bean引發的特定異常。然而,ELException顯然包裝了根本原因異常(即LoginFailedException)。我使用JSF 2(MyFaces 2.1.10),Spring EL解析器(Spring managed beans),el-api-2.2和glassfish el-impl-2.2。FullAjaxExceptionhandler只捕獲javax.el.E​​LException或java.lang.Throwable

這裏的錯誤:

Ajax request: No 
Status code: 500 
Exception type: class org.apache.myfaces.view.facelets.el.ContextAwareELException 
Exception message: javax.el.ELException: org.tests.omnifaces.exception.LoginFailedException: Login failed. 
Stack trace: org.apache.myfaces.view.facelets.el.ContextAwareELException: javax.el.ELException: org.tests.omnifaces.exception.LoginFailedException: Login failed. 
... 

LoginFailedException是一個簡單的自定義異常。 我將不勝感激任何幫助。提前致謝。

編輯: 實驗完成:

我在3個錯誤頁面時看到LoginFailedException拋出其中一個將被調用/使用。 XHTML錯誤頁面包含完全相同的代碼,除了標識哪個是哪個的標題字符串。以下是web.xml錯誤條目:

<error-page> 
    <exception-type>org.tests.omnifaces.exception.LoginFailedException</exception-type> 
    <location>/pages/errors/loginError.xhtml</location> 
</error-page> 

<error-page> 
    <exception-type>javax.el.ELException</exception-type> 
    <location>/pages/errors/elException.xhtml</location> 
</error-page> 

<error-page> 
    <exception-type>java.lang.Throwable</exception-type> 
    <location>/pages/errors/catchAllThrowable.xhtml</location> 
</error-page> 

catchAllThrowable.xhtml將被使用。如果我刪除(註釋掉web.xml)Throwable,ELException.xhtml將被使用。如果我刪除ELException,異常將由容器(tomcat)處理,而不是由loginError.xhtml處理。

希望能夠澄清我的情況。

UPDATE:

現在我使用AJAX調用提交表單(我想這是什麼樣的處理程序適用於)所有3錯誤處理程序活躍在web.xml中的網頁(Throwable的,ELException,LoginFailedException):

<h:commandButton id="loginButton" value="Login" action="#{login.loginUser}"> 
    <f:ajax execute="@form" render="@form messages" /> 
</h:commandButton> 

Throwable已被跳過,ELException匹配(elException.xhtml呈現)。仍然無法在LoginFailedException中歸零。

+0

請張貼你的功能需求,你有什麼試圖解決它,否則沒有人可以幫助你。 – 2013-03-04 01:35:35

+0

謝謝@Luiggi。我編輯了我的帖子以供澄清。希望能幫助到你。目前,這只是一個實驗/演示。我唯一的要求是使用FullAjaxExceptionHandler和適當的錯誤頁面顯示託管bean拋出的自定義異常。 – 2013-03-04 02:11:55

+0

來自OmniFaces的代碼片斷表明它解開了異常以得到根本原因並標識了錯誤頁面。我猜BalusC可以最好地回答這個問題:-) – 2013-03-04 02:22:19

回答

0

FullAjaxExceptionHandler只解開FacesException的根本原因。但是,MyFaces ContextAwareELException不是FacesException的子類,而是它的ELException的子類,因此保持未展開狀態。

根據OmniFaces issue 149FullAjaxExceptionHandler已被改進以解開ELException以及。這是自OmniFaces 1.4開始提供的。

相關問題