NetBeans18搭建Jakarta Faces4项目报错:com.sun.faces.util.Util类找不到
Jakarta Faces项目启动报错:ClassNotFoundException: com.sun.faces.util.Util
环境
- NetBeans IDE 18
- Tomcat 10.1.31
- Java 11
- 无Maven依赖的全新Jakarta Faces项目
Web.xml配置
<web-app xmlns=https://jakarta.ee/xml/ns/jakartaee xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance xsi:schemaLocation=https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_6_0.xsd version="6.0" > <servlet> <servlet-name>facesServlet</servlet-name> <servlet-class>jakarta.faces.webapp.FacesServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>facesServlet</servlet-name> <url-pattern>*.xhtml</url-pattern> </servlet-mapping> <context-param> <param-name>jakarta.faces.AUTOMATIC_EXTENSIONLESS_MAPPING</param-name> <param-value>true</param-value> </context-param> <welcome-file-list> <welcome-file>index.xhtml</welcome-file> </welcome-file-list> </web-app>
Bean类代码
package com.example; import jakarta.enterprise.context.RequestScoped; import jakarta.inject.Named; @Named @RequestScoped public class Hello { private String name; private String message; public void createMessage() { message = "Hello, " + name + "!"; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getMessage() { return message; } }
错误信息
org.apache.catalina.core.StandardWrapperValve.invoke Allocate exception for servlet [facesServlet] java.lang.ClassNotFoundException: com.sun.faces.util.Util
问题分析与解决
这个错误并非新版Jakarta Faces要求旧依赖,核心原因是Tomcat未自带Jakarta Faces实现,且你未手动添加对应的实现库。com.sun.faces.util.Util是Mojarra(Jakarta Faces官方实现)中的类,Tomcat作为轻量级Servlet容器,仅提供Servlet/JSP基础支持,不包含Jakarta Faces、CDI等Jakarta EE组件的实现。
解决步骤:
- 下载与Jakarta EE 6兼容的Mojarra版本(对应Faces 4.0)
- 将下载的
jakarta.faces.jar放入项目的WEB-INF/lib目录 - 由于代码使用了
@Named和@RequestScoped这类CDI注解,Tomcat同样不自带CDI实现,需额外添加CDI适配库(如Weld的Tomcat适配包)到WEB-INF/lib - 重新部署项目至Tomcat
内容的提问来源于stack exchange,提问作者Ram
相关产品推荐
相关产品推荐

