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

Struts 1 Java Discussion :

[DynaActionForm] NullPointerException


Sujet :

Struts 1 Java

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 72
    Par défaut [DynaActionForm] NullPointerException
    Salut a tous, j'ai un petit probleme, j'ai un NullPointerException dans mon fichier InitFormulaireAction je pense savoir d'ou viens l'erreur mais je ne vois rien de bizare dans le code, ça me parait correct, c'est sur qu'il y a um probleme quelque part mais je n'arrive pas a le trouver.

    Voici le code de ma page InitFormulaireAction:

    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
     
    package struts.formulaire;
     
    import java.io.*;
    import javax.servlet.*;
    import javax.servlet.http.*;
    import org.apache.struts.action.*;
     
    public class InitFormulaireAction extends Action {
     
    	private String[] getValeurs(int taille, String label) {
    		String[] valeurs = new String[taille];
    		for (int i = 0; i < taille; i++) {
    			valeurs[i] = label + i;
    		}
    		return valeurs;
    	}
     
    	public ActionForward execute(ActionMapping mapping, ActionForm form,
    			HttpServletRequest request, HttpServletResponse response)
    			throws IOException, ServletException {
    		// prépare le formulaire à afficher
    		// on met les informations nécessaires au formulaire dans son bean
    		DynaFormulaire formulaire = (DynaFormulaire) form;
    		formulaire.set("valeurscombo", getValeurs(5, "combo"));
    		formulaire.set("valeurslistesimple", getValeurs(7, "simple"));
    		formulaire.set("valeurslistemultiple", getValeurs(10, "multiple"));
    		// on rend la main
    		return mapping.findForward("afficherFormulaire");
    	} // execute
    	// liste des valeurs du combo
     
    }

    Mon erreur "NullPointerException" surviens ici "struts.formulaire.InitFormulaireAction.execute(InitFormulaireAction.java:24)" et voici ce que j'ai a la ligne 23 et24:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    DynaFormulaire formulaire = (DynaFormulaire) form;
    		formulaire.set("valeurscombo", getValeurs(5, "combo"));
    D'aprés ce que je vois c'est que l'object formulaire de type "DynaFormulaire" est vide mais j'ai beau chercher et je ne trouve rien, j'ai dejá regardé sur mon fichier "strtus-config.xml" dont voici le code:

    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
     
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE struts-config PUBLIC
    	"-//Apache Software Foundation//DTD Struts Configuration 1.1//EN"	 
    	"http://jakarta.apache.org/struts/dtds/struts-config_1_2.dtd">
     
    <struts-config>
    	<form-beans>
    		<form-bean type="strus.formulaire.DynaFormulaire" name="DynaFormulaire">
    			<form-property type="java.lang.String" name="opt" initial="non"/>
    			<form-property type="java.lang.String" name="chk1"/>
    			<form-property type="java.lang.String" name="chk2"/>
    			<form-property type="java.lang.String" name="chk3"/>
    			<form-property type="java.lang.String" name="champsaisie" initial=""/>
    			<form-property type="java.lang.String" name="mdp"/>
    			<form-property type="java.lang.String" name="boitesaisie" initial=""/>
    			<form-property type="java.lang.String" name="combo"/>
    			<form-property type="java.lang.String" name="listesimple"/>
    			<form-property type="java.lang.String[]" name="listemultiple"/>
    			<form-property type="java.lang.String" name="secret" initial="xxx"/>
    			<form-property type="java.lang.String[]" name="valeurscombo"/>
    			<form-property type="java.lang.String[]" name="valeurslistesimple"/>
    			<form-property type="java.lang.String[]" name="valeurslistemultiple"/>
    		</form-bean>
    	</form-beans>
    	<action-mappings>
    		<action path="/confirmation" name="DynaFormulaire" validate="false" scope="session" parameter="/vues/confirmation.jsp" type="org.apache.struts.actions.ForwardAction"/>
    		<action path="/init" name="DynaFormulaire" validate="false" scope="session" type="struts.formulaire.InitFormulaireAction">
    			<forward path="/vues/afficherFormulaire.jsp" name="afficherFormulaire"/>
    		</action>
    		<action path="/affiche" parameter="/vues/formulaire.jsp" type="org.apache.struts.actions.ForwardAction"/>
    	</action-mappings>
    	<message-resources parameter="ApplicationRessources" null="false"/>
    </struts-config>
    Et lá aussi je ne vois pas d'erreur dans mon fichier, j'ai dejá cherché sur le forum mais rien qui puisse m'aider.

    Je vou remercie d'avance pour l'aide que vous m'aporterez car c'est très important vu que sans ça je ne peux avancer...

    Encore une foi MERCI

  2. #2
    Expert confirmé

    Femme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Par défaut
    La classe utilisée dans le cas d'un ActionForm dynamique est DynaActionForm.

    Il faut donc coder :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <form-bean name="DynaFormulaire" type="org.apache.struts.action.DynaActionForm">
    et dans l'Action :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    DynaActionForm formulaire = (DynaActionForm) form ;
    Mais je ne pense pas que tu puisses initialiser un DynaActionForm via la méthode set.
    La valeur par défaut est normalement précisée dans le paramètre initial de la balise form-property.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 72
    Par défaut
    Mais en faisant ceci je n'utilise pas mon DynaFormulaire.class qui sert a faire un reset a mon formulaire vu que je cree un object du type DynaActionForm et non pas du type DynaFormulaire que celuici derive de DynaActionForm.

    Et quand je fais ceci il va directement a la page AfficherFormulaire.jsp donc je n'arrive pas a voir ma page Formulaire.jsp.

    Malheureusement je n'arrive pas a trouver ce qui ne vas pas, je sais bein quel est l'erreur mais je n'ai pas de solutions.

    Mais dans tous les cas merci beacoup pour ton aide et si tu as d'autres sugestions je suis prenant

    Merci

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 72
    Par défaut
    Ok, voila ce que j'ai lu a propos de cette exception nullPointerException:

    Une nullPointerException signifie qu'on essaye d'utiliser un objet référencé par un pointer nul, autrement dit qu'on essaye d'utiliser quelquechose qui n'existe pas.
    Pour comprendre cela, revenons au modèle objet : un objet dispose d'attributs, et de méthode. Pour pouvoir accéder à un attribut, ou utiliser une méthode, il nos faut une référence valide vers une instance de l'objet en question, et ensuite appeler la méthode désirée de cet objet.

    La nullPointerException nos indique en l'occurence que la référence qui pointe vers votre objet pointe vers null, autrement dit votre référence est invalide. On demande donc à du vide de faire quelque chose, ce qui est impossible.
    Donc d'apres ceci c'est ce qui se passe dans mon exemple c'est que l'object de type DynaFormulaire est vide, bom voici le code do ma classe DynaFormulaire:

    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
    package struts.formulaire;
     
    import org.apache.struts.action.*;
    import javax.servlet.http.*;
     
    public class DynaFormulaire extends DynaActionForm {
     
    	public void reset(ActionMapping mapping, HttpServletRequest request) {
    		// Reset les case a cocher valeur=off
    		set("chk1", "on");
    		set("chk2", "off");
    		set("chk3", "off");
     
    		// Reset listesimple - liste vide
    		set("listesimple", "");
     
    		// Reset listemultiple - tableau vide
    		set("listemultiple", new String[] {});
    	}
     
    }
    M classe DynaFormulaire ne fait qu'un reset des quelques champs, donc, dans ma classe InitFormulaireAction je cherche a faire un reset de certain champs et par consequent je fait appel a la classe DynaFormulaire qui a son tour derive de la classe DynaActionForm. Mais ce que je ne comprends pas c'est pourquoi quand j'essaye de l'instancier il me dit qu'il est vide.

    Bom aparament ou soit ma question est trop stupide et vous ne repondez pas a des questions stupides, soit vous ne pouvez pas m'aider car vous n'arrivez pas a comprendre ou est le probleme.

    Dans tous les cas je vous remercie.

  5. #5
    Expert confirmé

    Femme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Par défaut
    Je ne sais pas pourquoi personne d'autres ne répond à ton problème mais, comme je te l'ai dit plus haut, je ne pense que pas que tu puisses initialiser un DynaActionForm via la méthode set.
    En tout cas, à moins que ma mémoire me joue des tours, c'est ce qui m'a été dit quand j'ai suivi le cours Struts.

    As-tu vu quelque part que c'était possible ?

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 72
    Par défaut
    Salut, je te remercie vraiment de te pencher sur mon cas, au faite je suis en train de suivre le tutorial de Serge Tahé sur les struts et en efait le tutorial est comme ça, je ne sais pas si c'est correcte ou pas, j'ai eu quelques problemes sur se tutorial et jusqu'a maintenant j'ai reussi a les resoudre grace aux membres du forum mais la je galere vraiment.

    Est-ce-que tu aurias une autre solution pour resoudre mon probleme

  7. #7
    Expert confirmé

    Femme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Par défaut
    Si c'est écrit dans le tutoriel, c'est donc que ça doit marcher.
    Je vais donc jeter de nouveau un oeil sur ton code pour voir si je vois quelque chose d'anormal.
    Ce serait cool d'avoir un autre avis mais apparemment, le sujet de ton post ne passionne pas les foules.

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 72
    Par défaut
    C'est très simpa de tá part de vouloir me donner um coup de main. J'ai dejá chercher partout mais je n'arrive a rien

  9. #9
    Expert confirmé

    Femme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Par défaut
    Je viens de faire un test, en plus simple parce qu'avec seulement deux champs, et ça fonctionne très bien chez moi.
    Tu avais raison, on peut bien initialiser un DynaActionForm comme tu essaies de le faire.
    J'ai beau regardé ton code, je ne vois pas ce qui cloche.
    Faudrait vraiment un autre oeil.
    On cherche un volontaire pour se pencher sur le problème de The_freeman.

  10. #10
    Expert confirmé

    Femme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Par défaut
    En fait, je viens de voir une erreur dans la définition de ton form-bean.
    Tu as codé ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
          <form-bean type="strus.formulaire.DynaFormulaire" name="DynaFormulaire">
    Tu as mis strus sans le "t" dans le type.

    Le nom du package étant erroné, il est normal que ça plante.

    C'était vraiment tout bête mais ça ne saute pas tout de suite aux yeux.

  11. #11
    Expert confirmé

    Femme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Par défaut
    La prochaine fois, faudra regarder le message d'erreur dans la log de Tomcat car il est beaucoup plus parlant.

    J'ai reproduit l'erreur chez moi et tu aurais dû trouver dans la log le message suivant :
    GRAVE: Error creating form bean of class strus.formulaire.DynaFormulaire
    java.lang.ClassNotFoundException: strus.formulaire.DynaFormulaire

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 72
    Par défaut
    Je te remercie beaucoup, tu viens de me rendre un grand service, encore mil fois merci

    Tu as raison, je devrais regarder les logs de TomCat, au faite c'est ce que je fais mais malheureusement je n'ai rien dans les log de TomCat. J'ai essayé avec LOG4J mais je n'ai pas encore reuissi a le configurer afim qu'il funcionne, j'ai posté un message dans le forum mais jusqu'a maintenant je n'ai pas obtenu grand chose donc je vais continuer a chercher pour voir si j'arrive a m'en sortir...

    Encore une fois merci beaucoup

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 72
    Par défaut
    Ok je voulais vraiment te remercier pour tout c_nvy j'ai reussi a avancer dans le tutorial grace a toi.

    Maintenant il ne me reste plus que faire functionner log4j comme il faut car quant je l'initialise avec une classe d'initialisation il me met plein de trucs dans le log de TomCat.

    Donce les amis s'il y a des candidats a m'aider dans mon message de demande d'aide a propos de log4j je suis prenant

  14. #14
    Expert confirmé

    Femme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Par défaut
    De rien The_freeman.
    Tu t'en es sorti avec log4j parce que j'ai vu que ton post à ce sujet avait un tag Résolu ?

  15. #15
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 72
    Par défaut
    Je pense que je m'en suis sorti...

    Bom il y a encore beacoup a comprendre, mais j'ai dejá reussi a l'initialiser et a avoir un log.

    Je cherche encore a comprendre les messages du logger - DEBUG - INFO - WARM, etc... mais je pense que je vais y arriver, l'important c'est que ça tourne...

    Dans tous les cas merci

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

Discussions similaires

  1. [Struts][DynaActionForm et persistance des objets]
    Par jcos dans le forum Struts 1
    Réponses: 4
    Dernier message: 22/12/2004, 09h15
  2. [Débutant]NullPointerException
    Par Crazyblinkgirl dans le forum Langage
    Réponses: 4
    Dernier message: 18/08/2004, 13h58
  3. [Exception]Double buffering & NullPointerException
    Par Seiya dans le forum API standards et tierces
    Réponses: 25
    Dernier message: 09/07/2004, 18h41
  4. Heritage et NullPointerException
    Par Assiobal dans le forum Langage
    Réponses: 6
    Dernier message: 18/06/2004, 16h35
  5. JPanel & getGraphics() : NullPointerException
    Par dingoth dans le forum Composants
    Réponses: 7
    Dernier message: 21/05/2004, 15h56

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