Моя IDE указывает ManagedBean как устаревший. Я прочитал об этом и решил заменить свои аннотации javax.faces.bean.ManagedBean на javax.inject.Named. Но при замене мой CDI Bean не распознается (PostConstruct не вызывается):
//@ManagedBean(name = "carlistbean")
@Named(value = "carlistbean")
@SessionScoped
public class CarListBean implements Serializable {
@PostConstruct
public void init(){
cars = carRepository.getAllCars();
}
@Inject
private CarRepository carRepository;
Я использую Bean в качестве бэкэнда для моей страницы JSF:
<h:dataTable value = "#{carlistbean.cars}" var = "car"
Я на JSF 2.2.18
<dependency>
<groupId>com.sun.faces</groupId>
<artifactId>jsf-api</artifactId>
<version>2.2.18</version>
</dependency>
<dependency>
<groupId>com.sun.faces</groupId>
<artifactId>jsf-impl</artifactId>
<version>2.2.18</version>
</dependency>
Кто-нибудь может мне помочь/подсказать?
ОБНОВИТЬ
Я использую J2ee8
мой beans.xml в WEB-INF выглядит так:
<?xml version = "1.0" encoding = "UTF-8"?>
<beans xmlns = "http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation = "http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/beans_1_1.xsd"
bean-discovery-mode = "all">
</beans>
Да, я также использовал javax.enterprise.context.SessionScoped.
Какая версия Java EE? А сервер приложений? (как) вы убедились, что он не использует другую версию jsf? Если вы используете Java EE 6, у вас есть пустой файл beans.xml? Любое предупреждение в журнале сервера приложений?
или, если вы используете более новую версию Java EE, соответствующий контент beans.xml
Я обновил информацию в вопросе.
java ee 8 и на каком сервере вы работаете? А java ee 8 — это JSF 2.3, а не 2.2. Кроме того, ваш pom не должен включать в себя jsf jar-файлы, но должен иметь полные API-интерфейсы java ee 8 в качестве предоставленных зависимостей.





Вы также заменили sessionscope на cdi? stackoverflow.com/questions/4347374/…