Невозможно внедрить ExternalContext или RequestParam в управляемый компонент CDI @RequestScoped - PullRequest
0 голосов
/ 05 июня 2019

Обыскивая в Интернете, я обнаружил, что должна быть возможность @ Inject некоторых удобных JSF-объектов в bean-объекты CDI, эти объекты должны быть произведены JSF и представлены через Qualifiers в javax.faces.annotation. * (Например, @RequestMap или @ SessionMap).

Однако я не могу @ Inject эти ресурсы в CDI Beans. Даже инъекция ExternalContext или FacesContext завершается неудачно, что, как указано в спецификации JSF 2.3, должно быть возможно для @Inject, а также:

  • javax.faces.application.ResourceHandler
  • javax.faces.context.Flash

  • javax.servlet.http.HttpSession <- этот работает </p>

@RequestScoped
public class SimpleRequestParamReportProvider implements ReportParamsProvider {
    @Inject // <-- FAILS
    ExternalContext externalContext;

    @Inject // <-- FAILS
    FacesContext facesContext;

    @Inject @RequestMap // <-- FAILS
    Map<String, Object> requestMap;

    @Inject // <-- WORKS
    HttpSession httpSession;

Ошибка при запуске приложения:

Неудовлетворенные зависимости для типа FacesContext с квалификаторами @Default в точке внедрения [BackedAnnotatedField] @Inject report.SimpleRequestParamReportProvider.facesContext

Я использую JBoss EAP 7.2 , который соответствует JSF 2.3 https://access.redhat.com/articles/113373

Кто-нибудь еще сталкивался с этой же проблемой? Что-то мне не хватает?

EDIT Вот WEB-INF /face-config-xml, который я использую

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

EDIT 2 : внедрение объектов JSF работает после добавления аннотированного Java-класса @FacesConfig:

@FacesConfig(version = FacesConfig.Version.JSF_2_3)
public class FacesActivator {}
...