JSF 2.3 CDI не работает на Tomcat - PullRequest
0 голосов
/ 30 апреля 2018

Я пытаюсь настроить jsf 2.3 на tomcat 8 всякий раз, когда я использую @inject, у меня постоянно появляется ошибка, я гуглял и искал на stackoverflow.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 я все еще получаю то же сообщение об ошибке. Я не смог найти ни одного сообщения об ошибке внутри трассировки стека. Screen shot of the warning message in netbeans

Ответы [ 2 ]

0 голосов
/ 29 мая 2018

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

0 голосов
/ 30 апреля 2018

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...