Jsf 2 打开JSF2 Facelets页面会在JSP文件上显示404

Jsf 2 打开JSF2 Facelets页面会在JSP文件上显示404,jsf-2,facelets,Jsf 2,Facelets,我创建了一个新项目作为本教程 当我右键单击m.xhtml并选择RunonServer来运行它时,我在m.jsp上遇到了404错误 浏览器地址栏中的URL为:http://localhost:8080/Marwa/m.jsf 错误消息说 这是如何造成的,我如何解决 这是我的web.xml: <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-inst

我创建了一个新项目作为本教程

当我右键单击
m.xhtml
并选择RunonServer来运行它时,我在
m.jsp
上遇到了404错误

浏览器地址栏中的URL为:http://localhost:8080/Marwa/m.jsf

错误消息说

这是如何造成的,我如何解决

这是我的
web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
 <display-name>Marwa</display-name>
  <welcome-file-list>
    <welcome-file>m.xhtml</welcome-file>

  </welcome-file-list>
  <servlet>
    <servlet-name>Faces Servlet</servlet-name>
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>/faces/*</url-pattern>
    <url-pattern>*.jsf</url-pattern>
  </servlet-mapping>
  <context-param>
    <param-name>javax.servlet.jsp.jstl.fmt.localizationContext</param-name>
    <param-value>resources.application</param-value>
  </context-param>
  <context-param>
    <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
    <param-value>client</param-value>
  </context-param>
  <context-param>
    <param-name>org.apache.myfaces.ALLOW_JAVASCRIPT</param-name>
    <param-value>true</param-value>
  </context-param>
  <context-param>
    <param-name>org.apache.myfaces.PRETTY_HTML</param-name>
    <param-value>true</param-value>
  </context-param>
  <context-param>
   <param-name>org.apache.myfaces.DETECT_JAVASCRIPT</param-name>
   <param-value>false</param-value>
  </context-param>
  <context-param>
   <param-name>org.apache.myfaces.AUTO_SCROLL</param-name>
   <param-value>true</param-value>
  </context-param>

</web-app>

马尔瓦
m、 xhtml
Facesservlet
javax.faces.webapp.FacesServlet
1.
Facesservlet
/面孔/*
*.jsf
javax.servlet.jsp.jstl.fmt.localizationContext
资源.应用
javax.faces.STATE_保存方法
客户
org.apache.myfaces.ALLOW_JAVASCRIPT
真的
org.apache.myfaces.PRETTY_HTML
真的
org.apache.myfaces.DETECT\u JAVASCRIPT
假的
org.apache.myfaces.AUTO_滚动
真的

它正在寻找一个JSP文件而不是Facelets文件

JSP是旧JSF1.x中的默认视图技术。因此,这个问题表明您实际上正在使用JSF1.x,或者正在JSF1.xModus中运行JSF2.x

确保您已经真正了解了JSF2.x库。您可以通过读取服务器启动日志或使用zip工具提取JSFJAR文件并读取清单文件来检查JSF的确切版本。您也可以在重新下载正确的版本(或用于其他实现)。确保您获得了2.x版本

还要确保
faces config.xml
声明符合JSF 2.x规范版本。应该是这样的:

<?xml version="1.0" encoding="UTF-8"?>

<faces-config
    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-facesconfig_2_0.xsd"
    version="2.0">

    <!-- Config here -->

</faces-config>


如果您的Eclipse没有自动完成这一切,那么显然您使用的是过时的Eclipse版本。EclipseHelios(3.6)首次为JavaEE引入了内置JSF2支持。你可以得到最新的版本,目前是Indigo SR2(3.7.2)。

那么,还是有问题。服务器日志中打印的MyFaces版本是什么?服务器日志中有任何警告吗?当你在一个真正的网络浏览器中打开页面的时候呢?使用
/faces
URL?当我使用这个URL localhost:8080/Marwa/faces/m.xhtml时,我的war文件只显示文本apear和任何jsf组件,而服务器日志不显示您正在使用Mojarra 1.2_13。你需要2.x。升级库。你明白答案了吗?好的,巴卢斯克,我明白你说的话,我使用myfaces-core-assembly-2.1.7-bin.zip,eclips helios 3.6和tomcat 6,但它仍然告诉我“Mojarra 1.2_13”,但当我添加jsf-facelets.jar文件时,它是工作的,但它无法理解