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

基于JoinFaces与Spring Boot 3的JSF应用启动报错:CDI不可用

JoinFaces + Spring Boot 3 重构问题解决指南

一、Undertow Starter 选择建议

  • 优先使用 org.joinfaces:undertow-spring-boot-starter 5.3.13:这个Starter是JoinFaces专门为JSF集成优化的,和你当前用的jsf-spring-boot-starter 5.3.13版本完全对齐,能自动处理JSF与Undertow的适配细节,避免版本兼容问题。
  • 若选择Spring官方的org.springframework.boot:spring-boot-starter-undertow 3.3.12:虽然也能正常运行,但需要自行确保Spring Boot版本(3.3.x)与JoinFaces版本(5.3.x)的兼容性,不过当前两者版本是匹配的,只是缺少JoinFaces针对JSF的额外配置优化。

二、CDI不可用报错的解决方法

报错根源是GlassFish Faces(org.glassfish:jakarta.faces 4.1.4)默认会尝试初始化CDI上下文,而你明确不想使用CDI,需要通过配置和依赖调整来解决:

  1. 禁用JSF的CDI支持
    在application.properties中添加以下配置:

    jakarta.faces.CDI_ENABLED=false
    

    该配置会直接告诉GlassFish Faces不要尝试获取CDI BeanManager,从根源避免报错。

  2. 清理依赖冲突

    • 移除手动引入的jakarta.faces:jakarta.faces-api 4.0.1:jsf-spring-boot-starter已经内置了适配版本的JSF API,手动引入不同版本会导致API与实现版本不匹配(你当前API是4.0.1,实现是4.1.4),引发潜在问题。
    • 检查依赖树,确保没有意外引入CDI相关依赖(如jakarta.enterprise:jakarta.enterprise.cdi-api或Weld等CDI实现),如果有,通过<exclusions>标签排除。
  3. 确认Spring接管依赖注入
    JoinFaces默认会让Spring容器处理JSF Bean的依赖注入,只要禁用了JSF的CDI支持,Spring就能自动接管,无需额外配置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 05:12:32