2012-03-09 42 views
1

我一直無法讓我的index.xhtml文件加載正確,我已經檢查了所有的教程。有人可以指點我正確的方向嗎?我只是在瀏覽richfaces網站上的教程。richfaces + index.xhtml有錯誤

下面是我的web.xml文件:

<?xml version="1.0"?> 
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> 
<display-name>Greeter</display-name> 

<context-param> 
    <param-name>javax.faces.STATE_SAVING_METHOD</param-name> 
    <param-value>server</param-value> 
</context-param> 

<context-param> 
    <param-name>org.richfaces.SKIN</param-name> 
    <param-value>blueSky</param-value> 
</context-param> 

<context-param> 
    <param-name>org.richfaces.CONTROL_SKINNING</param-name> 
    <param-value>enable</param-value> 
</context-param> 

<filter> 
    <display-name>RichFaces Filter</display-name> 
    <filter-name>richfaces</filter-name> 
    <filter-class>org.ajax4jsf.Filter</filter-class> 
</filter> 

<filter-mapping> 
    <filter-name>richfaces</filter-name> 
    <servlet-name>Faces Servlet</servlet-name> 
    <dispatcher>REQUEST</dispatcher> 
    <dispatcher>FORWARD</dispatcher> 
    <dispatcher>INCLUDE</dispatcher> 
</filter-mapping> 

<listener> 
    <listener-class>com.sun.faces.config.ConfigureListener</listener-class> 
</listener> 

<!-- Faces Servlet --> 
<servlet> 
    <servlet-name>Loader</servlet-name> 
    <servlet-class>com.mounza.common.Loader</servlet-class> 
    <load-on-startup>2</load-on-startup> 
</servlet> 
<servlet> 
    <servlet-name>Faces Servlet</servlet-name> 
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> 
    <load-on-startup>1</load-on-startup> 
</servlet> 

<context-param> 
    <param-name>javax.faces.DEFAULT_SUFFIX</param-name> 
    <param-value>.xhtml</param-value> 
</context-param> 

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

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

<welcome-file-list> 
    <welcome-file>index.jsf</welcome-file> 
</welcome-file-list> 

<session-config> 
    <session-timeout> 
     30 
    </session-timeout> 
</session-config> 

回答

4

你在談論的<welcome-file>,對不對?它必須指向一個物理上存在的文件,因爲它在servletcontainer內部被用來顯示默認資源,每當一個文件夾被請求。在執行此操作前,servletcontainer會首先檢查文件是否存在。如果這個文件不存在,你只會得到一個404.

把它和JSF結合起來就可以在虛擬URL上執行,只需要一個特殊的技巧。您基本上需要欺騙servletcontainer與物理存在但index.jsf文件那裏在您的真實index.xhtml文件旁邊的文件夾中。這樣servletcontainer不會顯示404,而是執行一個向前的文件,該文件將自動觸發FacesServlet

但是,如果您碰巧已經使用JSF 2.x(似乎並非如此,但無論如何,只是爲了完整性),那麼您也可以將FacesServlet的URL模式從*.jsf (和/faces/*)至*.xhtml。這樣你就不再需要擺弄虛擬網址了。這在JSF 1.x中是不可能的,因爲FacesServlet會繼續在無限循環中調用自己。