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 :

[struts][débutante]Erreur actionForm utilisant action error


Sujet :

Struts 1 Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2003
    Messages : 18
    Points : 17
    Points
    17
    Par défaut [struts][débutante]Erreur actionForm utilisant action error
    Bonsoir,
    j'ai passé toute la journée à essayer de regler le problème en vain, pourtant c des exemples touts simple qui existent un peu partout

    j'ai une pasge d'authentification par login et password que je teste en dur pour commencer c la page login.jsp
    j'utilise deux classes LoginForm et LoginAction tel que décrits dans l'exemple
    voici les differents sources:
    fichier struts-config.xml:
    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="ISO-8859-1" ?>
    <!DOCTYPE struts-config PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN"
    "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">
    <struts-config>
      <form-beans>
            <form-bean name="loginForm" type="mesClasses.LoginForm">
                <form-property name="pass" type="java.lang.String"  initial="ok" />
                <form-property name="nom" type="java.lang.String"  initial="ok" />
            </form-bean>
       </form-beans>
    <action-mappings>
    <!--ACCUEIL-->
    <action
    path="/index"
    parameter="/index.jsp"
    type="org.apache.struts.actions.ForwardAction"
    />
    <!--AUTHENTIFICATION-->
    <action
                path="/login"
    			parameter="/vue/login.jsp"
                input="/vue/erreurs.jsp"
                name="loginForm"
    			scope="request"
    			validate="true"
                type="mesClasses.LoginAction">
                <forward name="log_failed" path="/vue/erreurs.jsp" />
                <forward name="log_ok" path="/vue/accueil.jsp" />
            </action>
     
    </action-mappings>
    <message-resources parameter="resources.TestResources"/>
    </struts-config>
    fichier LoginForm:
    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
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    package mesClasses;
     
    import javax.servlet.http.HttpServletRequest;
     
    import org.apache.struts.action.ActionError;
    import org.apache.struts.action.ActionErrors;
    import org.apache.struts.action.ActionForm;
    import org.apache.struts.action.ActionMapping;
     
     
     
    public class LoginForm extends ActionForm
    {
    	// --------------------------------------------------------- Instance Variables
    	/** pass property */
    	private String pass=null;
    	/** nom property */
    	private String nom=null;
     
    	// --------------------------------------------------------- Methods
     
    	public void reset(ActionMapping mapping, HttpServletRequest request)
    	{
    		nom = null;
    		pass = null;
    	}
     
     
    	public ActionErrors validate(
    		ActionMapping mapping,
    		HttpServletRequest request)
    	{
    		ActionErrors ae = new ActionErrors();
     
    		if (nom.length() == 0)
    		{
    			ae.add("nom", new ActionError("error.login"));
     
    		}
    		if (pass.length() == 0)
    		{
    			ae.add("pass", new ActionError("error.password"));
     
    		}
     
    		return ae;
     
     
    	public String getPass()
    	{
    		return pass;
    	}
     
    	public void setPass(String pass)
    	{
    		this.pass = pass;
    	}
     
    	public String getNom()
    	{
    		return nom;
    	}
     
    	public void setNom(String nom)
    	{
    		this.nom = nom;
    	}
    }
    fichier LoginAction

    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
    package mesClasses;
    import java.io.PrintWriter;
     
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
     
    import org.apache.struts.action.Action;
    import org.apache.struts.action.ActionForm;
    import org.apache.struts.action.ActionForward;
    import org.apache.struts.action.ActionMapping;
     
    import mesClasses.LoginForm; //importation de la classe associé au formulaire 
    							//(méthodes de récupération de la saisie)
     
    public class LoginAction extends Action
    {
    	public ActionForward execute(
    		ActionMapping mapping,
    		ActionForm form,
    		HttpServletRequest request,
    		HttpServletResponse response)
    		throws Exception
    	{
    		LoginForm loginForm = (LoginForm)form;
     
    		String username = loginForm.getNom();//méthode definit dans LoginForm
    		String password =loginForm.getPass();//méthode definit dans LoginForm
     
    		if (username.equals("admin") && password.equals("admin"))
    		{
    				return mapping.findForward("log_ok");
    		}	else
    			{
    				//loginForm.setPass(null);
    				//loginForm.reset(mapping, request);
    				return mapping.findForward("log_failed");
    			}
     
    	}
    }
    fichier TestResources.properties
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    index.title = Bienvenue sur la Page Accueil
    login.username = Votre Nom Utilisateur
    login.password = Votre Mot de Passe
    error.login = Login Incorrect
    error.password = Password Incorrect
    et voici l'erreur qui s'affiche:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    java.lang.NullPointerException
    	mesClasses.LoginForm.validate(LoginForm.java:35)
    	org.apache.struts.action.RequestProcessor.processValidate(RequestProcessor.java:942)
    	org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:255)
    	org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
    	org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:507)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    c quoi mon erreur???
    Merci d'avance[/code]

  2. #2
    Expert éminent

    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
    Points : 7 778
    Points
    7 778
    Par défaut
    D'après ce que tu as codé dans ton struts-config :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
      <form-beans> 
            <form-bean name="loginForm" type="mesClasses.LoginForm"> 
                <form-property name="pass" type="java.lang.String"  initial="ok" /> 
                <form-property name="nom" type="java.lang.String"  initial="ok" /> 
            </form-bean> 
       </form-beans>
    tu utilises une ActionForm dynamique.

    Donc, ton ActionForm doit hériter de DynaActionForm et tu ne dois pas définir les propriétés pass et nom, ni les getters et setters correspondant mais seulement la méthode validate().

    Il me semble aussi que tu dois plutôt coder :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <form-bean name="loginForm" type="org.apache.struts.action.DynaActionForm">
    et dans la méthode execute :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    DynaActionForm loginForm = (DynaActionForm) form ;
    String username = (String) loginForm.get("nom"); 
    String password  = (String) loginForm.get("pass");
    Ou alors plus simplement, si tu ne veux pas utiliser une ActionForm dynamique, tu ne changes rien à ton ActionForm et à ton Action mais tu supprimes les tags form-property dans form-bean name="loginForm".

  3. #3
    Membre à l'essai
    Inscrit en
    Janvier 2005
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 9
    Points : 11
    Points
    11
    Par défaut [struts][débutante]Erreur actionForm utilisant action error
    Le problème se situe au niveau de la classe LoginForm.
    Dans la méthode validate, tu ne testes pas l'existence même de la variable, avant de tester sa longueur. La variable n'existant pas, l'exception NullPointerException est levée. Le test devrait être comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    if (login == null || login.length == 0)
    {
    }
    De plus l'utilisateur peut saisir "      " (espaces) comme login et / ou mot de passe et pourtant le formulaire sera validé !!!!!
     
    Tu devrais non pas tester la longueur du texte mais s'il est différent de " " : 
    le test devient alors : 
    if (login == null || "".equals(login.trim()))
    {
    }
    Autres choses :
    1 - Il n'est pas nécessaire dinitialiser les attributs du formulaire avec la valeur null
    2 - Quand tu compares une variable de type String à un texte, fait le plutôt comme suit : "admin".equals(user) , cela t'éviteras des exceptions NullPointerException si la variable user vaut null.

    En espérant t'avoir aider

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2003
    Messages : 18
    Points : 17
    Points
    17
    Par défaut C reglé merci!!!!!!
    salut,
    c'etait bien le LoginForm
    ca marche, merci beaucoup

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 11/04/2007, 16h04
  2. Réponses: 6
    Dernier message: 03/07/2006, 09h26
  3. [struts] afficher un message d'erreur depuis l'action
    Par discoboys dans le forum Struts 1
    Réponses: 6
    Dernier message: 10/02/2006, 11h28
  4. [Eclipse][Struts][Tomcat] Erreur Http 503 La servlet action.
    Par minique dans le forum Servlets/JSP
    Réponses: 8
    Dernier message: 20/09/2004, 18h44
  5. [Struts][Débutant]Servlet Action non dispo ?
    Par Ho(c)ine. dans le forum Struts 1
    Réponses: 7
    Dernier message: 09/04/2004, 09h06

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