【问题标题】:JSF works only with the .xhtml endingJSF 仅适用于 .xhtml 结尾
【发布时间】:2023-03-19 21:27:01
【问题描述】:

我从 JSF 网站的编程开始。目前所有文件都以 .xhtml 结尾。当我去http://localhost:8080/myProject/start.jsf 时,一切都很好。但是当我将文件从 start.xhtml 重命名为 start.jsf 时,我变成了 NoClassDefFound 错误。

我的错误是什么?

  <servlet-name>Faces Servlet</servlet-name>
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>*.jsf</url-pattern>
  </servlet-mapping>
  <context-param>
    <param-name>javax.faces.PROJECT_STAGE</param-name>
    <param-value>Development</param-value>
  </context-param>

【问题讨论】:

    标签: jsf jakarta-ee facelets


    【解决方案1】:

    您必须更改 javax.faces.DEFAULT_SUFFIX 参数(在 web.xml 中)

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

    但是,这是不可取的 - 对您的文件使用 .xhtml.jsp。 请注意,您可以毫无问题地将.jsp 与facelets 一起使用(例如,如果您的IDE 的自动完成功能不适用于.xhtml)。

    还要注意:

    • faces servlet 映射决定了如何从 http 角度引用 jsf 页面
    • DEFAULT_SUFFIX 参数表示文件的扩展名是什么。

    【讨论】:

      【解决方案2】:

      为什么要重命名文件start.jsf? JSF 文件的正确扩展名是.xhtml(但您可以修改此默认扩展名,如 Bozho 所述)。

      事实上,准确地说,这个扩展是由Facelets(或JSF 2.0,因为它原生集成了Facelets)定义的,如果使用“基本”JSP 文件,情况就不同了。

      【讨论】:

        【解决方案3】:

        最好保留 .xhtml,因为这是正确的做法,但您可以使用 web.xml 中的 javax.faces.DEFAULT_SUFFIX 上下文参数对其进行配置。

        【讨论】:

        • 使用 .xhtml 扩展名,我可以下载带有代码的页面。并且 Eclipse 不会使用 .xhtml 文件完成代码
        猜你喜欢
        • 2018-08-21
        • 1970-01-01
        • 2015-09-01
        • 1970-01-01
        • 1970-01-01
        • 2017-10-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多