IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JSF Java Discussion :

JSF, l'exception NullPointerException


Sujet :

JSF Java

  1. #1
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2
    Points : 3
    Points
    3
    Par défaut JSF, l'exception NullPointerException
    saluut!

    Je travaille avec JPA,JSf, et j'ai un petit problème: quand je lance ce petit programme, l'exception NullPointerException se lance: voici le prog:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
     
    package controller;
     
    import java.util.ArrayList;
    import java.util.List;
    import javax.annotation.PostConstruct;
    import javax.faces.bean.ApplicationScoped;
    import javax.faces.bean.ManagedBean;
     
    import entities.Membre;
    import javax.ejb.EJB;
    import model.MembreFacade;
     
    @ManagedBean(name = "themeService", eager = true)
    @ApplicationScoped
    public class ThemeService {
     
        @EJB
        private MembreFacade membreFacade;
     
        private List<Membre> membres;
     
        @PostConstruct
        public void init() {
            membres = new ArrayList<>();
            membres = null;
            try {
                membres = membreFacade.findAll();
     
            } catch (NullPointerException e) {
            }
        }
     
        public List<Membre> getMembres() {
            return membres;
        }
     
        public static void main(String args[]) throws NullPointerException{
            ThemeService t = new ThemeService();
            System.out.println(t.membres.size());
     
        }
     
    }

    Que faire svp, j'ai vraiment besoin d'aide, j'ai cherché partt mais j'arrive a résoudre mon prob
    Merci bcp d'avance

  2. #2
    Membre régulier
    Homme Profil pro
    Développeur Java
    Inscrit en
    Décembre 2011
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2011
    Messages : 48
    Points : 124
    Points
    124
    Par défaut
    Salut,

    Pouvez-vous être plus explicite dans le post. Sinon ça va être un peut compliqué de vous donner un coup de main.

    Je veux dire le NullPointerException est généré quand? Par quelle fonction (ou méthode)?


    Best regards!

  3. #3
    Membre chevronné
    Avatar de eulbobo
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2003
    Messages
    786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2003
    Messages : 786
    Points : 1 993
    Points
    1 993
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
        public static void main(String args[]) throws NullPointerException{
            ThemeService t = new ThemeService();
            System.out.println(t.membres.size());
        }

    Dans ton main, tu appelles membres juste après la création de ton objet ThemeService en faisant un new.
    Du coup, tu ne profites pas de l'injection ni du fonctionnement de base des EJB avec les annotations (c'est magique, mais faut les faire passer par la boîte magique avant)
    Du coup "membres" est null
    Du coup, paf quand tu appelles .size() dessus


    Ha, et vire ce gros moche catch(NullPointerException e) : un NullPointer est quelque chose qu'on évite en testant la valeur de l'objet avant de l'utiliser
    Je ne suis pas mort, j'ai du travail !

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    279
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 279
    Points : 102
    Points
    102
    Par défaut indépendant de JSF
    Bonjour,

    Le probleme n'est pas liée au framework jsf.

    L'exception est levéé en raison de la liste membres qui est null

    dans ta méthode init(); tu crée une nouvelle liste de membres ensuite tu la remet à null, et quand tu esseye de recuperer la taille de ta liste sa te fera cette exception

    supprime la ligne dans init :

    peut etre tu peux faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if(membre == null){
       membres = new ArrayList<>();
       membres = membreFacade.findAll();
    }
    ta liste est chargé une seule fois

  5. #5
    Membre chevronné
    Avatar de eulbobo
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2003
    Messages
    786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2003
    Messages : 786
    Points : 1 993
    Points
    1 993
    Par défaut
    Non...

    C'est juste qu'elle fait un new sans passer par l'injection de dépendance
    Je ne suis pas mort, j'ai du travail !

  6. #6
    Modérateur
    Avatar de kolodz
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    2 211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 211
    Points : 8 316
    Points
    8 316
    Billets dans le blog
    52
    Par défaut
    Si membreFacade n'est pas injecté, il aura effectifivement une erreur lancé. Mais celle-ci est catché par le try/catch mise en place.
    Comme le dit facilus68, si il supprime son affectation membres = null;. Il aura dans membres une liste vide et non un null.

    Cependant, il est aussi possible que membreFacade.findAll() retourne lui-même la valeur null. Peu probable, mais pas impossible.

    Il y a deux codes qui me semblerai bon en fonction du comportement voulu.

    On considère qu'on peut fonctionner sans la liste des membres fournit par la facade :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    @PostConstruct
        public void init() {
            if(membreFacade!=null) {
                membres = membreFacade.findAll();
            }
            // Quoi qu'il arrive, on s'assure que members n'est pas null.
            if(membres !=null) {
                membres = new ArrayList<>();
            }
        }
    On considère qu'on ne peut pas fonctionner sans la liste des membres fournit par la facade :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    @PostConstruct
        public void init() {
            if(membreFacade!=null) {
                 membres = membreFacade.findAll();// On suppose dans ce cas que findAll() retourne toujours quelque chose de non null.
            } else {
                 throw new ConfigurationException("Initialisation impossible : Le membre membreFacade n'as pas été injecté.")
            }
        }
    Cordialement,
    Patrick kolodziejczyk.
    Si une réponse vous a été utile pensez à
    Si vous avez eu la réponse à votre question, marquez votre discussion
    Pensez aux FAQs et aux tutoriels et cours.

  7. #7
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 310
    Points : 9 522
    Points
    9 522
    Billets dans le blog
    1
    Par défaut
    eulbobo a raison, le problème vient du fait que ce n'est pas le conteneur qui va créer l'instance de la classe ThemeService, du coup, inutile de croire que l'injection de dépendance va se faire ou que l'appel de la méthode init() liée à @PostConstruct va être appelée

    Donc, pour tester cette classe, ce n'est pas via une méthode main(...) lancée en mode ligne de commande qu'on procède, le plus simple serait de la tester via un contrôleur JSF tous simplement.
    Sinon, tu as la possibilité de définir ton bean comme étant chargé dès le démarrage de l'application par eager, comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    @ManagedBean(eager=true)
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. [jsf + richfaces] Exception : no tag was defined for name
    Par fisherprice dans le forum Servlets/JSP
    Réponses: 0
    Dernier message: 13/04/2010, 14h33
  2. probleme avec l'exception NullPointerException
    Par dearraed dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 24/03/2010, 14h12
  3. [JSF/EJB3 stateless] NullPointerException
    Par Yohips dans le forum JSF
    Réponses: 8
    Dernier message: 31/08/2009, 11h40
  4. Réponses: 1
    Dernier message: 11/06/2009, 05h17
  5. [JSF][RichFaces]Exception rare : srcBegin > srcEnd
    Par maVariable dans le forum JSF
    Réponses: 2
    Dernier message: 09/06/2008, 16h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo