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 :

[Débutant] Gestion des erreurs


Sujet :

Struts 1 Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mai 2003
    Messages
    921
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Mai 2003
    Messages : 921
    Par défaut [Débutant] Gestion des erreurs
    Bonjour à tous,

    j'ai bien regardé comment gérer les erreurs de saisies dans mon formulaire ... grâce à la FAQ Struts !

    Voici comment j'ai fait :


    Mon struts-config.xml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <action
    	path="/FormAffichMachine"
    	name="formChoixMachine"
    	scope="session"
    	validate="true"
    	input="/choixMachine.do"
    	type="com.manitou.pad.ChoixMachineAction"
    >
    	<forward name="succes" path="/vues/ficheMachine.jsp"/>
    	<forward name="echec" path="/vues/choixMachine.jsp"/>
    </action>

    Dans ma Form :
    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
    [...]
    // Validation
    public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) {
     
    	// Gestion des erreurs
    	ActionErrors erreurs = new ActionErrors();
     
    	// Le numéro de fabrication doit être un numérique, de longueur : 6
    	if (getManufactNumber() == null || getManufactNumber().length() < 6) {
    		erreurs.add("manufactNumberVide", new ActionMessage("error.manufactNumber.vide"));
    	}
     
    	return erreurs;
    }
    [...]

    Ma JSP (avant) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    [...]
    <html:errors property="manufactNumberVide" />
    [...]

    Dans mon .properties (avant) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    errors.header=<span class="erreur">&nbsp;&nbsp;
    errors.footer=</span>
    error.manufactNumber.vide=Numéro de fabrication <i>incorrect</i>.

    Jusqu'ici ... TOUT VA BIEN !


    Par contre lorsque l'utilisateur saisit un numéro de fabrication "logique" : nnnnnn (un entier de 6 chiffres), je fais un contrôle dans mon Action et j'essaye de générer un nouveau message d'erreur.


    Dans mon Action :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    if (id != 0) {
    	// Récupération des données en BDD, puis affectation aux éléments de ma page JSP résultat
    	
    	return mapping.findForward("succes");
    } else {
    	// Gestion des erreurs
    	ActionErrors erreurs = new ActionErrors();
    	
    	erreurs.add("manufactNumberInexistant", new ActionMessage("error.manufactNumber.inexistant"));
    	
    	//return erreurs;
    	
    	return mapping.findForward("echec");
    }
    Je suis obligé de faire comme cela, car ma méthode "validate" de mon Form n'a pas générer d'erreurs ... forcément la saisie de l'utilisateur est "logique" !

    Vous suivez toujours ?!


    MON PROBLEME est que la partie en rouge dans le dernier extrait de code, ne peut pas fonctionner ... on ne peut, évidemment pas, avoir deux "return" dans la même méthode !



    MA QUESTION est donc : comment signaler à STRUTS qu'une nouvelle erreur a été détecté ? ou comment propager le "erreurs" jusqu'à ma page JSP ?


    Ma page JSP (après) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    [...]
    <html:errors property="manufactNumberVide" />
    <html:errors property="manufactNumberInexistant" />
    [...]

    Dans mon .properties (après) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    errors.header=<span class="erreur">&nbsp;&nbsp;
    errors.footer=</span>
    error.manufactNumber.vide=Numéro de fabrication <i>incorrect</i>.
    error.manufactNumber.inexistant=Numéro de fabrication <i>inexistant</i>.

    Merci d'avance pour votre aide !

    Gôm

  2. #2
    Membre averti
    Inscrit en
    Janvier 2007
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 56
    Par défaut
    Il faut que tu sauvegardes les erreurs avec la méthode saveErrors (dans ton Action)
    Par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ActionMessages errors = new ActionMessages();
    // ajout des erreurs ...
    saveErrors(request.getSession(), errors);

  3. #3
    Membre chevronné

    Profil pro
    Inscrit en
    Mars 2007
    Messages
    392
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 392
    Par défaut
    il fait appeler la méthode :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    saveErrors(request, errors);
    avant le return pour copier les erreurs dans la request.
    soit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    if (id != 0) {
    	// Récupération des données en BDD, puis affectation aux éléments de ma page JSP résultat
    	
    	return mapping.findForward("succes");
    } else {
    	// Gestion des erreurs
    	ActionErrors erreurs = new ActionErrors();
    	
    	erreurs.add("manufactNumberInexistant", new ActionMessage("error.manufactNumber.inexistant"));
    	
    	saveErrors(request, errors);
    	
    	return mapping.findForward("echec");
    }
    ps : Les normes de programmation Java préconnisent de ne faire qu'un seul return par méthode.. c'est bcp plus simple pour la lecture et le débogage.
    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
     
    String actionForward = "";
    if (id != 0) {
    	// Récupération des données en BDD, puis affectation aux éléments de ma page JSP résultat
    	actionForward= "success";
    } else {
    	// Gestion des erreurs
    	ActionErrors erreurs = new ActionErrors();
     
    	erreurs.add("manufactNumberInexistant", new ActionMessage("error.manufactNumber.inexistant"));
     
    	actionForward = "echec";
    }
    if (!errors.isEmpty()) {
    	saveErrors(request, errors);
    }
    return (mapping.findForward(actionForward));
    }

  4. #4
    Membre éclairé
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mai 2003
    Messages
    921
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Mai 2003
    Messages : 921
    Par défaut
    Merci à tous les deux ! C'est exactement ce que je cherchais !


    Merci pour le PS Mattheox ... j'ai également modifié mes "return".


    Tant que vous êtes là, j'en profite pour poser une autre question !

    Quel est le meilleur moyen de tester le contenu d'un champ texte (est-ce un numérique, un alpha-numérique, rien, etc.) ?

  5. #5
    Membre chevronné

    Profil pro
    Inscrit en
    Mars 2007
    Messages
    392
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 392
    Par défaut
    Citation Envoyé par ghohm
    Quel est le meilleur moyen de tester le contenu d'un champ texte (est-ce un numérique, un alpha-numérique, rien, etc.) ?
    tu as la librairie Commons-lang qui a implémenter la plupart de ces tests surtout sur la class StringUtils

  6. #6
    Membre éclairé
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mai 2003
    Messages
    921
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Mai 2003
    Messages : 921
    Par défaut
    Citation Envoyé par mattheox
    tu as la librairie Commons-lang qui a implémenter la plupart de ces tests surtout sur la class StringUtils
    Merci, mais l'on vient de me conseiller de me lancer carrément dans la technique "validator", exemple :

    http://www.selbyinc.com/technology/validation.html


    Gôm

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

Discussions similaires

  1. question d'un débutant sur la gestion des erreurs en VBA
    Par David1259 dans le forum VBA Access
    Réponses: 1
    Dernier message: 03/01/2009, 12h43
  2. [Débutant] Gestion des erreurs
    Par ghohm dans le forum Struts 1
    Réponses: 5
    Dernier message: 01/06/2007, 11h13
  3. [Débutant][PL/SQL] Gestion des erreurs
    Par weebib dans le forum Oracle
    Réponses: 4
    Dernier message: 13/06/2006, 16h22
  4. [XSLT]Est ce qu'il y'a la gestion des erreur en xslt ?
    Par miloud dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 04/02/2004, 17h19
  5. [LG]gestion des erreurs
    Par frontin dans le forum Langage
    Réponses: 3
    Dernier message: 29/11/2003, 22h41

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