0

我尝试转到我的页面“index.xhtml”,在浏览器地址栏中输入 /index.xhtml,但它导致 404 错误,即找不到 index.jsp。我不知道为什么调用jsp。

我的观点:

<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:ui="http://java.sun.com/jsf/facelets" 
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:c="http://java.sun.com/jsp/jstl/core">
       <h:head>
           <title>This is a Test</title>    
       </h:head> 
       <h:body>
           <div>
               <H2>
                   <h:outputText value="test"/>
               </H2>
           </div>
       </h:body>
</html>

我的 web.xml:

<servlet>
    <servlet-name>FacesServlet</servlet-name>
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>FacesServlet</servlet-name>
    <url-pattern>*.xhtml</url-pattern>
</servlet-mapping>
4

1 回答 1

1

这表明您实际上使用的不是 JSF 2.x,而是 JSF 1.x。在 JSF 1.x 中,FacesServlet默认情况下会使用.jsp后缀来根据请求 URL 定位视图文件。所以,当index.xhtml被请求时,它会寻找物理文件index.jsp。在 JSF 2.x 中,默认后缀已更改为.xhtml,这意味着当index.xhtml被请求时,它将查找物理文件index.xhtml

*.xhtml中的只是<url-pattern>必须FacesServlet侦听传入 HTTP 请求的 URL 模式。

为了正确使用 JSF 2.x,您应该删除运行时类路径中的所有 JSF 1.x 库。这包括/WEB-INF/lib文件夹。如果您不确定版本,因为 JAR 的文件名中没有提到它,请使用 ZIP 工具将其解压缩并查看/META-INF/MANIFEST.MF. 或者只是将它们全部删除并从http://javaserverfaces.java.net重新下载正确的。

也可以看看:

于 2013-07-26T14:14:53.400 回答