JSF 2.3 CDI не работает на Tomcat

Я пытаюсь настроить jsf 2.3 на tomcat 8 всякий раз, когда я использую @inject, у меня постоянно появляется ошибка, я гуглял и искал на stackru.com, но не могу найти решение. Я уже установил CDI (Weld) на него, следуя примеру @BalusC отсюда. Как установить и использовать CDI на Tomcat? все же я продолжаю иметь неудовлетворенную зависимость: ни один боб не соответствует точке внедрения. Я не могу понять, есть что-то, что я пропускаю?

ConfigurationBean.java

import static javax.faces.annotation.FacesConfig.Version.JSF_2_3;
import javax.faces.annotation.FacesConfig;
@FacesConfig(
     // Activates CDI build-in beans
     version = JSF_2_3
)
public class ConfigurationBean {
}

beans.xml

<?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"
  version="1.1" bean-discovery-mode="all">
</beans>

Лица-config.xml

<?xml version='1.0' encoding='UTF-8'?>
<faces-config version="2.3"
  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/web-facesconfig_2_3.xsd">
</faces-config>

PushBean.java

@Named
@ViewScoped
public class PushBean implements Serializable {
  @Inject @Push(channel="counter") //This is where i get the error message unsatisfied dependency: no bean matches the injection point
  private PushContext push;
}

Для меня этот код выглядит хорошо, но мне интересно, если это ошибка NetBeans. Я пытался, что без использования Spring просто только Tomcat с JSF я все еще получаю то же сообщение об ошибке. Я не смог найти ни одного сообщения об ошибке внутри трассировки стека. Снимок экрана с предупреждением в netbeans

2 ответа

Spring НЕ является полноценным CDI-контейнером и только "знает" @Named а также @Inject аннотации и, следовательно, (скорее всего) не признает @Push аннотация в качестве спецификатора и не может найти bean-компонент и выдает ошибку, которую вы получаете (отправка явной ошибки и трассировки стека, кстати, то, что вы всегда должны делать в вопросе!)

Смотрите также:

Я бы посоветовал проверить ваши возможности. Встроенные области действия CDI: @ApplicationScoped, @SessionScoped, @ConversationScoped и @RequestScoped . В CDI нет аннотации @ViewScoped. Вы можете внедрить тот же уровень или более широкую область, но не ту, которая меньше (например, вы не можете внедрить @RequestScoped в компонент @SessionScoped)

Другие вопросы по тегам