Comment injecter un Bean CDI dans une ManagedBean?

Je veux injecter un Bean CDI dans une ManagedBean soit avec l'annotation @Inject ou @Produire. Le Bean CDI que j'utilise est:

@Named
@Startup
@ApplicationScoped
public class BaseBean {

private List<String> custs;

public List<String> getCusts() {
    return custs;
}

public void setCusts(List<String> emps) {
    this.custs = emps;
}

public BaseBean(){

}

@PostConstruct
void init() {
    custs = new ArrayList<String>();
    custs.add("Cust1");
    custs.add("Cust3");
    custs.add("Cust2");
    custs.add("Cust4");
}

}

La ManagedBean, dans laquelle je veux injecter le CDI, la Fève est:

@SessionScoped
@ManagedBean
public class Hello implements Serializable {

@Inject
private BaseBean dBean;

private static final long serialVersionUID = 1L;
private List<String> customers;
private List<String> customersSelect;

public Hello() {
}

@PostConstruct
void init() {
// dBean = new BaseBean();
    customers = dBean.getCusts();
}

public List<String> getCustomers() {
    return customers;
}

public List<String> getCustomersSelect() {
    return customersSelect;
}

public void setCustomersSelect(List<String> customersSelect) {
    this.customersSelect = customersSelect;
}
}

Dans la fonction init cependant, il jette NullPointerException. Si j'utilise l'annotation @Produit au lieu de @Inject, le résultat est le même: NullPointerException. Est quelque chose de mal avec l'Bean CDI (mauvaise annotations)? Dois-je essayer de l'injecter avec une mauvaise façon? Est-ce que mon code manque de quelque chose? Comment puis-je le faire fonctionner? Voici le code JSF:

<h:form id ="f">
    <h:selectManyCheckbox layout="pageDirection" border="1"  value="#{hello.customersSelect}">
        <f:selectItems value="#{hello.customers}"></f:selectItems>
    </h:selectManyCheckbox><br />
    <h:commandButton action="response.xhtml" value="Click me" />
</h:form>

PS: Si j'utilise un Stateless Bean BaseBean et je l'injecter avec l'annotation @EJB, il fonctionne sans problème.

Mise à JOUR: j'ai essayé avec les annotations @SessionScoped (javax.enterprise.context.SessionScoped) et @Named sur le Hello classe. Bien que je n'ai pas reçu NullPointerException, le h:selectManyCheckbox est vide. par ailleurs, il me semble, que lorsque j'ajoute le beans.xml fichier sous META-INF dossier, je reçois un StartException, bien que le fichier est-il censé être. Je pense que mon application ne manque de la bonne configuration pour être capable de l'Injection de Dépendance. Ce qui est susceptible d'avoir besoin d'une configuration supplémentaire?

Mise à JOUR 2: Cette erreur s'affiche lorsque j'ajoute le beans.xml fichier dans le dossier WEB-INF. L'beans.xml le fichier est vide, il ne contient que la ligne :

<?xml version="1.0" encoding="UTF-8"?> 

L'erreur est:

Services which failed to start:      service jboss.deployment.unit."JSF1.war".PARSE: org.jboss.msc.service.StartException in service jboss.deployment.unit."JSF1.war".PARSE: Failed to process phase PARSE of deployment "JSF1.war"

12:51:11,482 ERROR [org.jboss.as.server.deployment.scanner] (DeploymentScanner-threads - 1) {"JBAS014653: Composite operation failed and was rolled back. Steps that failed:" => {"Operation step-2" => {"JBAS014671: Failed services" => {"jboss.deployment.unit.\"JSF1.war\".PARSE" => "org.jboss.msc.service.StartException in service jboss.deployment.unit.\"JSF1.war\".PARSE: Failed to process phase PARSE of deployment \"JSF1.war\""}}}}
InformationsquelleAutor arjacsoh | 2013-03-11