You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jakarta Faces 3:JSF标签未转HTML且FacesServlet类找不到

问题分析与解决建议

核心版本兼容性问题

Tomcat 8.5.x 仅支持 Java EE 8(javax. 命名空间),而你使用的 Jakarta EE 9.1 + JSF 3.0 属于 Jakarta EE 9(jakarta. 命名空间),两者命名空间完全不兼容,这是导致jakarta.faces.webapp.FacesServlet无法加载、JSF标签无法解析的根本原因。

具体解决方案

方案1:降级依赖适配Tomcat 8.5

将Maven依赖替换为Java EE 8规范下的JSF 2.3版本(对应javax命名空间):

<!-- Java EE 8 API -->
<dependency>
    <groupId>javax</groupId>
    <artifactId>javaee-api</artifactId>
    <version>8.0</version>
    <scope>provided</scope>
</dependency>
<!-- JSF 2.3 实现(Mojarra) -->
<dependency>
    <groupId>org.glassfish</groupId>
    <artifactId>javax.faces</artifactId>
    <version>2.3.17</version>
    <scope>compile</scope>
</dependency>

同步修改web.xml中的Servlet配置为javax命名空间:

<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>*.xhtml</url-pattern>
</servlet-mapping>

方案2:升级Tomcat支持Jakarta EE 9

若坚持使用Jakarta EE 9.1 + JSF 3.0,需将Tomcat升级到 Tomcat 10.x:

  • Tomcat 10.0.x 适配Jakarta EE 9
  • Tomcat 10.1.x 适配Jakarta EE 9.1

额外检查项

  • 确认Maven依赖scope:JSF实现(如Mojarra)设为compile,确保打包后能被Tomcat加载;Java EE/Jakarta EE API设为provided,避免与Tomcat自带API冲突。
  • 清理缓存:在IntelliJ中执行File → Invalidate Caches...,同时删除Tomcat的work目录,清除旧缓存干扰。
  • 检查faces-config.xml命名空间:方案1对应http://xmlns.jcp.org/xml/ns/javaee,方案2对应http://xmlns.jcp.org/xml/ns/jakartaee。

内容的提问来源于stack exchange,提问作者myyvee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 21:16:01