Spring Boot 3通过其里程碑为客户提供了从Java EE迁移到Jakarta的时间,将包名称从javax
更改为jakarta
。但这不仅仅是包装名称。我无法让Spring Boot与JSF一起运行,更不用说Primefaces Jakarta了。
我尝试的所有解决方案,似乎要么依赖CDI,然后抱怨没有工作的CDI,->因为Spring Boot有另一种注入机制,所以它不是Glassfish。或者它抱怨找不到工厂,比如:
Servlet.init() for servlet [facesServlet] threw exception
java.lang.IllegalStateException: Keine Factory als Backup für jakarta.faces.lifecycle.LifecycleFactory gefunden.
at jakarta.faces.FactoryFinderInstance.notNullFactory(FactoryFinderInstance.java:496) ~[jakarta.faces-api-4.0.1.jar:na]
at jakarta.faces.FactoryFinderInstance.getFactory(FactoryFinderInstance.java:190) ~[jakarta.faces-api-4.0.1.jar:na]
如果我手动设置工厂类名,他们会再次想要CDI,我就回到了开始的地方(无论如何,我都不想让Spring和CDI并行存在(。
我使用最新版本的Jakarta库和Spring Boot里程碑。喜欢";jakarta.faces:jakarta.FacesAPI:4.0.1〃"org.glassfish:jakarta.faces:4.0.0〃;以及";org.springframework.boot:spring-boot starter web:3.0.0-M4〃;。
有没有任何教程、开源项目或其他任何东西可以展示它是如何做到的?
在faces配置的末尾添加以下内容可能会有所帮助:
servletContext.setAttribute(com.sun.faces.RIConstants.FACES_INITIALIZER_MAPPINGS_ADDED, Boolean.TRUE);