2010-06-16 34 views
0

我重寫在com.sun.facelets.FaceletViewHandler定義的handleRenderResponse方法時不工作一個自定義的錯誤頁面(包含所需的外觀和感覺以及其他內容)。這是我想要的方式重定向到一個facelet延伸FaceletViewHandler

String errorPage = "/error.xhtml";   
String contextPath = context.getExternalContext().getRequestContextPath();   
String errorPagePath = contextPath+errorPage; 
context.getExternalContext().redirect(errorPagePath); 

前面的代碼是我用來執行重定向到這個自定義錯誤頁面。無論如何,當我執行重定向時,系統會提示下載對話框(這是與Internet Explorer一起使用的,在Firefox中,頁面無法正常顯示或按我的預期顯示)。我嘗試將「/error.xhtml」更改爲「/error.jsf」,但在這種情況下,我收到了404錯誤。

不知何故,我認爲XHTML文件在重定向後沒有被處理到Facelets ViewHandler,如果我打開下載的xhtml文件,我可以看到EL表達式沒有解析,ui標籤沒有處理。我的應用程序中的其他頁面沒有問題,只有以編程方式進行重定向時纔會出現問題。

從我的web.xml重要數據:

facelets.VIEW_MAPPINGS設置爲* .xhtml

javax.faces.DEFAULT_SUFFIX設置爲.xhtml

servlet- 「Faces Servlet」的映射是「.jsf」和「/ faces/

+1

任何你不在'web.xml'中使用''的理由? – BalusC 2010-06-16 20:51:28

+0

我可以這樣做,但實際上我希望能夠動態地控制發生異常時會發生什麼(如調用特定導航規則或更新託管bean,更新會話數據等)。如果我使用錯誤頁面,我不確定我是否可以控制這一數量,您怎麼看? – 2010-06-17 21:56:29

+0

它可以是一個JSF(XHTML)頁面。您可以將託管bean附加到它。託管bean可以訪問'FacesContext'。做數學:)順便說一下,當在其他人的帖子中評論其他人的評論時,使用'@ name'來立即通知他們。直到我偷看,我纔看到您的評論。另見[this](http://meta.stackexchange.com/questions/1093/make-recent-activity-and-responses-show-new-comments-on-questions-answers-i-have/35913#35913) – BalusC 2010-06-18 15:30:15

回答

0

Facelets模板存在問題,該模板包含一個錯誤,一旦解決該錯誤,應用程序就可以正常工作。