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

Spring Web Java Discussion :

Déclencher une méthode à l'ouverture d'une page, problème d'instanciation


Sujet :

Spring Web Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 29
    Points : 15
    Points
    15
    Par défaut Déclencher une méthode à l'ouverture d'une page, problème d'instanciation
    Bonjour,

    Je développe une application avec Spring et MyFaces. Dans cette application, j'aimerais charger une liste à l'affichage d'une page jsp. J'ai donc mis l'appel de la méthode qui remplit la liste dans le constructeur du contrôleur et mon contrôleur en scope request.
    Malheureusement, j'ai des soucis de nullPointerException (ma couche dao n'est pas instanciée) quand je fais cela.

    Pourtant avant de vouloir charger ma liste à l'affichage de ma page, je déclenchais ce chargement via un lien et il se faisait sans problèmes...

    Je me demande alors pourquoi tout se charge sans problèmes quand je déclenche mon appel dans un lien et pas lors de l'appel au constructeur de mon contrôleur...

    Pourriez-vous m'aiguiller s'il vous plait ?

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 33
    Points : 38
    Points
    38
    Par défaut
    Je pense que ta méthode chargée de remplir la liste doit faire appel à des instances d'objets qui ne sont pas encore instanciés lors de l'appel du constructeur mais le sont une fois la page affichée. Ce qui expliquerait que ça fonctionne dans un lien...
    Néanmoins, il serait plus facile de te répondre avec le code de la méthode en question (celle qui remplit la liste).

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 29
    Points : 15
    Points
    15
    Par défaut
    Merci de ta réponse et désolée pour le retard de la mienne.

    Voilà le code de la méthode qui remplit la liste :
    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
    public void remplirListe() 
    {
    	logger.log(Level.INFO, "Appel de remplirListe");
    	listeStringGestionnaires  = new TreeSet<String>();
    	try
    	{
    		listeGestionnaires = gestionnaireService.getAllGestionnaires();
     
    		Iterator<Gestionnaire> i;
    		i=listeGestionnaires.iterator();
    		Gestionnaire g = i.next();
     
    		while(i.hasNext())
    		{
    			listeStringGestionnaires.add(g.getNom() + " "+ g.getPrenom() + " "+ g.getuId());
    			g = i.next();
     
    		}
    	}
    	catch(Exception e)
    	{
    		logger.log(Level.ERROR, "AjoutGestionnaireController.remplirListe : " + e);
    	}
    }
    Voici la déclaration de mon bean AjoutGestionnaireController :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <bean id="ajoutGestionnaireController" class="fr.univ.paris7.dsi.deRec.controller.AjoutGestionnaireController" scope="request">
    	<property name="gestionnaire"><ref local="gestionnaire"/></property>
    	<property name="gestionnaireService"><ref local="gestionnaireService"/></property>
    	</bean>
    Il semble qu'en fait se soit mon bean DAO appelé par le service pour remplir la liste qui ne soit pas instancié.

    Comment faire pour qu'il le soit avant que la page soit chargée ? Est-ce possible ?

  4. #4
    Membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2010
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2010
    Messages : 98
    Points : 60
    Points
    60
    Par défaut
    Bonjour,

    Alors moi je ne serais pas d'une grande aide car je suis dans un cas un peu similaire, et je pense que, lisant ton poste , tu pourrais m'aider.

    Comment tu fais pour déclencher ton action , a partir d'un lien ???

    Je cherche a faire ca depuis deux jours et j'ai rien trouvé dessus....

    et derniere chose , comment tu code ta jsp ???;

    Ce que j'ai fais ne marche pas, ca stagne sur la page .action


    Merci d'avance

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 29
    Points : 15
    Points
    15
    Par défaut
    Pour déclencher une action à partir d'un lien, dans ta jsp il faut utiliser l'attribut action du tag commandLink en lui indiquant la méthode à appeler :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <h:commandLink  value="Agir" action="monControleur.agir"/>
    Ensuite pour la navigation, il faut définir la règle de navigation dans le fichier (faces-config.xml usuellement). Pour que l'application détecte le "from-outcome" du cas de navigation, il suffit de renvoyer la chaine que tu as choisies dans ta méthode.

    Exemple :

    Fichier faces-config.xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <navigation-rule>
    		<from-view-id>page1.jsp</from-view-id>
    		<navigation-case>
    			<from-outcome>allerAPage2</from-outcome>
    			<to-view-id>page2.jsp</to-view-id>
    			<redirect/>
    		</navigation-case>
    	</navigation-rule>
    Méthode du controleur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public String agir()
    	{
    		System.out.println("J'agis");
                    return "allerAPage2";
    	}
    Voilà ma méthode pour faire ça.

  6. #6
    Membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2010
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2010
    Messages : 98
    Points : 60
    Points
    60
    Par défaut
    Merci pour ta reponse...mais du coup, je n'utilise plus Spring, je reste sous Struts et Hibernate ...

    Merci encore.

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 29
    Points : 15
    Points
    15
    Par défaut
    Personne n'aurait une idée pour instancier les classes avant le chargement de la page alors ?

    Apparemment il ne charge pas les sqlmap (j'utilise Ibatis) et du coup je me retrouve avec une couche dao corrompue...

  8. #8
    Membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2010
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2010
    Messages : 98
    Points : 60
    Points
    60
    Par défaut
    En fait,
    moi j'ai triche , j'ai mis mon action sur un lien...situe sur ma page d'accueil...
    via un <html:link> que tu renvoie sur la jsp sur laquelle tu veux afficher tes trucs....

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 29
    Points : 15
    Points
    15
    Par défaut
    J'ai fini par avoir une réponse.

    Alors il faut bien mettre le traitement que l'on veut faire dans le constructeur mais il faut passer les beans utilisés en paramètres du constructeur.

    Pour ce faire, dans la déclaration du bean il faut utiliser le tag <constructor-arg> au lieu du tag <property>.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 31/10/2012, 16h01
  2. Réponses: 0
    Dernier message: 24/05/2011, 11h05
  3. Utiliser une méthode non-static dans une méthode static
    Par mcfly37 dans le forum Débuter avec Java
    Réponses: 3
    Dernier message: 18/08/2010, 11h41
  4. Une méthode pour les sauts de page
    Par solorac dans le forum Excel
    Réponses: 3
    Dernier message: 08/08/2007, 12h07
  5. Réponses: 2
    Dernier message: 22/03/2007, 15h06

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