Spring Boot 3 и JSF с Джакартой не работают
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.faces-api:4.0.1», «org.glassfish:jakarta.faces:4.0.0» и «org.springframework.boot:spring-boot-starter-web:3.0.0- М4".
Есть ли какой-нибудь учебник, проект с открытым исходным кодом или что-то еще, что показывает, как это делается?
1 ответ
Добавление в конце конфигурации ваших лиц может помочь:
servletContext.setAttribute(com.sun.faces.RIConstants.FACES_INITIALIZER_MAPPINGS_ADDED, Boolean.TRUE);