2012-03-19 50 views
2

我們在weblogic10.3中使用JSF2.0.2,我們正在處理FileNotFound或Page Not Found在web.xml中與404錯誤頁面。java.lang.NullPointerException在com.sun.faces.lifecycle.RestoreViewPhase.notifyAfter而不是HTTP 404找不到頁面

  webapp->    
        folder-a->page1.xhtml 
          page2.xhtml 

如果我們請求一個頁面,其是不是一個內部文件夾一個,例如page3.xhtml,那麼它不被web.xml中404捕獲,而是落入到JSF層和在下面的異常結果。

java.lang.NullPointerException 
    at com.sun.faces.lifecycle.RestoreViewPhase.notifyAfter(RestoreViewPhase.java:297) 
    at com.sun.faces.lifecycle.RestoreViewPhase.doPhase(RestoreViewPhase.java:110) 
    at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:114) 
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:308) 

回答

1

這是在早期的鑽嘴魚科版中的錯誤將發生,當你配置,同時恢復的觀點應該執行PhaseListener,但UIViewRootnull。這個bug是在Mojarra 2.0.4中引入的,並且已經報告爲issue 1764,並且自從Mojarra版本2.1.0(根據源代碼獲得2.0.6)以來已經被修復。所以,升級至少該版本應該可以解決這個問題。

升級了Mojarra後,你會遇到另一個問題。當沒有找到視圖時,Mojarra不發送404,而是拋出,這是java.io.FileNotFoundException的一個子類。所以這最終成爲HTTP 500響應。因此,如果您在錯誤代碼404上配置了錯誤頁面,則根本不會顯示錯誤頁面,而是會顯示錯誤代碼爲500的錯誤頁面或異常類型中最接近的匹配項。你需要配置的錯誤頁面,而不是如下:

<error-page> 
    <exception-type>com.sun.faces.context.FacesFileNotFoundException</exception-type> 
    <location>/errors/404.xhtml</location> 
</error-page> 

,或者如果你不想成爲JSF實現依賴

<error-page> 
    <exception-type>java.io.FileNotFoundException</exception-type> 
    <location>/errors/404.xhtml</location> 
</error-page> 
+0

balucs ...感謝您的答覆....在web.xml中添加FacesFileNotFoundException或FileNotFoundException並不能解決問題..我將禁用phaselistener並參見 – user684434 2012-03-19 19:30:57

+0

也許您錯過了第1段中的陳述,說明您的問題是由Mojarra中的錯誤引起的?當然,單獨添加新的異常類型不會解決它。這只是你升級了莫哈拉之後的修復**。您需要升級至少Mojarra 2.0.4。 – BalusC 2012-03-19 19:36:37

+0

感謝您的澄清 – user684434 2012-03-19 19:37:48