2011-01-06 52 views
20

我有一個簡單的使用Facelets的JSF2應用程序。我的web.xml文件中設置如下: -如何使用faces servlet映射設置JSF2 <welcome-file>?

<servlet-mapping> 
<servlet-name>Faces Servlet</servlet-name> 
<url-pattern>*.jsf</url-pattern> 
</servlet-mapping> 

我想設置應用程序爲默認歡迎頁面這是/pages/login.xhtml。當我進入瀏覽器的上下文根目錄時,我似乎無法獲得歡迎文件設置。

我的web.xml歡迎設置如下: -

<welcome-file-list> 
<welcome-file>/pages/login.jsf</welcome-file> 
</welcome-file-list> 

如何強制歡迎頁轉到到登錄頁面,並確保它穿過面的servlet?

如果我用下面的頁面顯示卻一直沒有通過Faces servlet的消失等Faces組件不會呈現: -

<welcome-file-list> 
<welcome-file>pages/login.xhtml</welcome-file> 
</welcome-file-list> 

任何幫助表示讚賞!

回答

22

您必須創建一個空的login.jsf文件,與您的login.xhtml文件相鄰。出於某種原因,這種破解需要欺騙servlet容器,使其認爲你的歡迎文件存在。

注意:響應服務仍然是使用您的login.xhtml文件的JSF響應,而不是您創建的空的login.jsf文件。

+3

感謝您的編輯BalusC - 我回答了我期待的問題,而不是我正在閱讀的問題! – 2011-01-07 03:07:19

1

原始解決方案的附加信息。

這只是對版本3之前的servlet容器的向後兼容性需求。例如,在Glassfish 3.1或Tomcat 7下運行後,不再需要這樣的空文件。我運行了測試,以驗證使用Tomcat 6和Tomcat 7.在過去,我已經使用Glassfish進行了測試,並且假設Tomcat 6問題正在發揮作用,因爲我們當前在Tomcat 6中運行我們的軟件,並且它不是3.0 servlet容器。我一直在使用帶有重定向的JSP頁面,但是在完全轉移到facelets之後,我不喜歡剩下一個留在JSP頁面上。這是一個很好的解決方案,直到我們運行在3.0 servlet容器中。它工作的真正原因是所有的事情都是通過WEB.XML條目完成的,它檢查文件是否存在。真正的工作是通過JSF處理的,因爲它捕捉到面對頁面的請求,因此它從不會碰到任何空白頁面。