2013-01-17 3 views
3

Il semble que la dépendance ne soit pas injectée, y a t-il un problème avec mon code?JBoss AS 7.1.1 injection de dépendance dans l'application JSF

page

<p:dataTable styleClass="centralizado" id="cdt" var="c" value="#{indexBean.getCampanhas()}"> 

IndexBean

import javax.faces.bean.ManagedBean; 
import javax.faces.bean.ViewScoped; 
import javax.inject.Inject; 

@ManagedBean 
@ViewScoped 
public class IndexBean { 
    @Inject 
    private GerenciaContas contas; 
    @Inject 
    private GerenciaCampanhas campanhas; 
    @Inject 
    private Conversor conv; 

    public List<Campaign> getCampanhas() throws Exception { 
     return campanhas.getTodasCampanhas(); 
    } 

    public GerenciaContas getContas() { 
     return contas; 
    } 

    public Conversor getConversor() { 
     return conv; 
    } 

} 

Une des classes que j'utilise:

public class GerenciaCampanhas 
{ 
    public List<Campaign> getTodasCampanhas() throws Exception { 
       //ordinary code 
    } 
} 

Suis-je manque une annotation dans ma classe de Conversor? Je reçois un NullPointerException parce que « GerenciaCampanhas Campanhas » est nulle puis en appelant la méthode getCampanhas() dans mes indexBean Merci

+0

Quels sont les paquets de '@ ManagedBean' et' @ ViewScoped'? – SJuan76

+0

import javax.faces.bean.ManagedBean; import javax.faces.bean.ViewScoped; – fredcrs

+3

Qu'est-ce que 'GerenciaCampanhas' exactement (CDI, EJB, Spring, ManagedBean)? Si vous utilisez CDI, vous avez besoin d'un fichier vide nommé 'beans.xml' dans votre dossier META-INF afin d'activer CDI. – atamanroman

Répondre

-1
  1. Remplacer @ManagedBean par @Named - vous ne pouvez pas utiliser @Inject dans JSF gérés haricots (voir this question
  2. Sélectionner une autre portée que @ViewScoped - il n'y a pas de possibilités de CDI gérés haricots,
  3. Assurez-vous que vous avez le fichier beans.xml dans le dossier META-INF de votre ejb (si c'est un projet d'entreprise, il va sous le META-INF dans votre projet ejb et un der WEB-INF dans votre projet web).

Comme:

import java.io.Serializable; 
import javax.enterprise.context.SessionScoped; 
import javax.inject.Named; 
import javax.inject.Inject; 
import xxxx.GerenciaContas; 

@Named 
@SessionScoped 
public class IndexBean implements Serializable { 
    @Inject 
    private GerenciaContas contas; 

Si vous avez besoin d'utiliser @ViewScoped ajouter MyFaces extensions CODI à votre projet comme expliqué dans ce question. Salutations du Brésil =).

+0

-1: vous avez tort. Vous pouvez injecter des EJB dans JSF 2 simplement en utilisant l'annotation '@ EJB' avant de déclarer l'attribut EJB. Pas besoin d'utiliser CDI du tout. –

+0

Mais ne peut pas utiliser '@ Inject', comme OP l'intention, non? – kauedg

+1

Comme indiqué à partir de la question, nous ne sommes pas sûr si OP voulait vraiment utiliser @ Inject ou s'il est en phase d'apprentissage et de faire des expériences. Une autre option pourrait être de convertir les 'GerenciaCampanhas' (et les autres classes de logique métier) en EJB en y ajoutant l'annotation' @ Stateless', les annotations '@ ManagedBean' et' @ ViewScoped 'resteront dans le bean géré définition. –

Questions connexes