簡體   English   中英

JSF2.3 FacesConverter 托管無法注入無狀態服務

[英]JSF2.3 FacesConverter managed can not inject a stateless service

環境:

  • 野蠅 22
  • Java 11
  • JSF 2.3

我創建了一個@FacesConverter managed=true 但是當我嘗試@Inject 一個@Stateless class 我得到null。

人臉.xhtml

    ...
    <h:outputText value="#{workBean.work.type.name}" rendered="#{!workBean.editable}"/>
    <p:selectOneMenu id="cbxType" value="#{workBean.work.type}"
                     required="true" requiredMessage="#{msgs.wrk_reqtype}"
                     converter="workTypeConverter"
                     rendered="#{workBean.editable}">
        <f:selectItem itemLabel="#{msgs.select}"  itemValue="#{null}" noSelectionOption="false" />
        <f:selectItems value="#{workBean.types}" var="t"
                       itemValue="#{t}" itemLabel="#{t.name}"/>
    </p:selectOneMenu>
    ...

工作類型轉換器

import javax.faces.application.FacesMessage;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import javax.faces.convert.ConverterException;
import javax.faces.convert.FacesConverter;
import javax.inject.Inject;
import java.time.format.DateTimeParseException;

@FacesConverter(value = "workTypeConverter", managed = true)
public class WorkTypeConverter implements Converter {

    @Inject
    WorkTypeManager typeMgr; //null¿?

    @Override
    public Object getAsObject(FacesContext context, UIComponent component, String value) {
        if (value == null || value.isEmpty()) {
            return null;
        }
        try {
            return typeMgr.findById(Integer.parseInt(value));
        } catch(Exception e){
            throw new ConverterException(new FacesMessage(value + " string is not a valid WorkType"));
        }
    }

    @Override
    public String getAsString(FacesContext context, UIComponent component, Object value) {
        if (value == null) {
            return null;
        }
        if (value instanceof WorkType) {
            return ((WorkType)value).getId().toString();
        } else {
            throw new ConverterException(new FacesMessage(value + " object is not a valid WorkType"));
        }
    }
}

pom.xml 依賴項

<dependencies>
    <dependency>
        <groupId>jakarta.platform</groupId>
        <artifactId>jakarta.jakartaee-api</artifactId>
        <version>8.0.0</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.primefaces</groupId>
        <artifactId>primefaces</artifactId>
        <version>10.0.0</version>
    </dependency>
    <dependency>
        <groupId>io.jsonwebtoken</groupId>
        <artifactId>jjwt</artifactId>
        <version>0.9.0</version>
    </dependency>
    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-lang3</artifactId>
        <version>3.1</version>
    </dependency>
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi-ooxml</artifactId>
        <version>3.15</version>
        <type>jar</type>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>1.7.25</version>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
        <scope>test</scope>
    </dependency>
</dependencies>

您不能在 FacesConverter 或 FacesComponent 中使用 @Inject。 但是您可以以編程方式獲取 CDI bean。 例如

CDI.current().select(WorkTypeManager.class).get();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM