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 :

ActionForm et dysfonctionnement quand la validation retourne une erreur.


Sujet :

Struts 1 Java

  1. #1
    Membre expert
    Avatar de Alexandre T
    Homme Profil pro
    Chef de projets AMO
    Inscrit en
    Mai 2002
    Messages
    1 213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets AMO
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 213
    Points : 3 001
    Points
    3 001
    Par défaut ActionForm et dysfonctionnement quand la validation retourne une erreur.
    Bonjour,

    J'utilise un ActionForm, pour modifier les utilisateurs de mon application. J'ai bien lu la FAQ, et fait quelques recherches, mais je ne suis pas sûr de partir avec la bonne méthode.

    Le principe est très simple. La classe ModifierUtilisateurAction fonctionne et me rempli correctement mon formulaire qui est composé d'un libellé (champ text) obligatoire et d'une liste déroulante (champ select) initialisée par la variable dddwProfile transmise par un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    //Constante.DDDW_CERBERE est une chaine de caractère contenant dddw_cerbere
    //Set Cerbere est un Set<String,String>
    request.setAttribute(Constante.DDDW_CERBERE,setCerbere);
    Quand on clique sur Enregistrer, on est emmené vers l'action EnregistrerUtilisateurAction. Tout s'enregistre quand les champ sont bien remplis.

    Le libellé de l'utilisateur est obligatoire. J'ai surchargé la méthode validate de mon UtilisateurForm (héritant d'ActionForm). Le test fonctionne et me retourne vers mon tiles (page jsp). Mais là une exception JSP est levée et me dit en toute logique que dddwCerbere n'est pas initialisée.

    ServletException in '/WEB-INF/jsp/admin/modifierUti.jsp' : Cannot find bean under name dddwCerbere.
    Dans l'URL, je suis sur enregistrerUtilisateurAction et non pas sur modifierUtilisateurAction.

    Je m'y prends mal je pense, car je peux toujours recopier le traitement de ModifierUtilsateurAction et redéclarer ma liste déroulantea et tout cela, mais je pense que Struts n'est pas si stupide et que je ne devrais pas à le faire

    Voici comment j'ai déclaré mes actions et mes Forms dans Struts :
    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
    <struts-config>
        <form-beans type="org.apache.struts.action.ActionFormBean">
            <form-bean name="saisieUtiForm" id="utiForm"
                type="i2.application.vh.presentation.form.UtiForm" dynamic="false">
                <icon>
                    <large-icon id="admin_png">../../vh/images/admin.png</large-icon>
                </icon>            
            </form-bean>
        </form-beans>
        <!-- ========== Action Mapping Definitions ============================== -->
        <action-mappings type="org.apache.struts.action.ActionMapping">
     
            <!-- Interface du Back end -->
     
            <!--  Gestion des administrateurs -->
            <action path="/admin/listerUtiAction"
                type="i2.application.vh.presentation.securite.ListerUtiAction">
                <forward name="succes" path=".adminListerUti"
                    redirect="false" />
            </action>
            <action path="/admin/modifierUtiAction"
                type="i2.application.vh.presentation.securite.ModifierUtiAction">
                <forward name="succes" path=".adminModifierUti"
                    redirect="false" />
            </action>
            <action path="/admin/enregistrerUtiAction"
                type="i2.application.vh.presentation.securite.EnregistrerUtiAction"
                name="saisieUtiForm" scope="request" input=".adminModifierUti">
                <forward name="succes" path=".adminListerUti"
                    redirect="false" />
            </action>
        </action-mappings>
    </struts-config>
    Qu'est-ce que je dois faire pour que les traitements d'initialisation de mon ModifierUtilisateurAction ne soit pas à refaire dans EnregistrerUtilisateurAction quand le formulaire est mal rempli ?

  2. #2
    Membre averti

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

    Informations forums :
    Inscription : Mars 2007
    Messages : 392
    Points : 439
    Points
    439
    Par défaut
    je pense qu'il manque le validate="true" dans le struts-config.xml car je ne crois pas qu'alors il appelle la méthode "validate"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <struts-config>
    
            <action path="/admin/enregistrerUtiAction"
                type="i2.application.vh.presentation.securite.EnregistrerUtiAction"
                name="saisieUtiForm" scope="request" input=".adminModifierUti" validate="true">
                <forward name="succes" path=".adminListerUti"
                    redirect="false" />
            </action>
        </action-mappings>
    </struts-config>

  3. #3
    Membre expert
    Avatar de Alexandre T
    Homme Profil pro
    Chef de projets AMO
    Inscrit en
    Mai 2002
    Messages
    1 213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets AMO
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 213
    Points : 3 001
    Points
    3 001
    Par défaut
    La méthode validate est bien appelée puisqu'il me retourne le message d'erreur (et le bon). Mais quand il réaffiche le formulaire pour que l'internaute remplisse les champs obligatoires, il bloque car certaines variables déclarées dans ModifierUtilisateurAction ne sont pas déclarer dans EnregistrerUtilisateurAction.

    Pour l'instant je pallie au problème en faisant hérité ModifierUtilisateurAction et EnregistrerUtilisateurAction de la même classe abstraite UtilisateurAction. Mais quand je regarde les tutoriels, j'ai vraiment pas l'impression d'utiliser la bonne méthode.

  4. #4
    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
    Il faut mettre le Set dddwCerbere dans le scope session.

  5. #5
    Membre expert
    Avatar de Alexandre T
    Homme Profil pro
    Chef de projets AMO
    Inscrit en
    Mai 2002
    Messages
    1 213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets AMO
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 213
    Points : 3 001
    Points
    3 001
    Par défaut
    Citation Envoyé par c_nvy Voir le message
    Il faut mettre le Set dddwCerbere dans le scope session.
    Ca fonctionne parfaitement ainsi, merci. Mais juste une question avant de noter le tag résolu : Ce n'est pas un peu barbare comme solution niveau mémoire ? C'est une liste déroulante à trente choix. Si pour chaque session, je stocke cela, ça peut consommer, non ?

  6. #6
    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
    Lorsque l'objet est utilisé sur plusieurs pages, tu n'as pas d'autres choix que d'utiliser la session.
    L'important, c'est de mettre les objets en session seulement lorsque c'est justifié.
    Sinon, rien ne t'empêche de supprimer l'objet de la session lorsque tu n'en as plus besoin via un removeAttribute.

  7. #7
    Membre expert
    Avatar de Alexandre T
    Homme Profil pro
    Chef de projets AMO
    Inscrit en
    Mai 2002
    Messages
    1 213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets AMO
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 213
    Points : 3 001
    Points
    3 001
    Par défaut
    Oui c'est donc ce que je viens de faire. Après l'enregistrement je le supprime. Cela fonctionne. Merci bien

  8. #8
    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
    De rien.

  9. #9
    Membre averti

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

    Informations forums :
    Inscription : Mars 2007
    Messages : 392
    Points : 439
    Points
    439
    Par défaut
    Citation Envoyé par Alexandre T Voir le message
    Pour l'instant je pallie au problème en faisant hérité ModifierUtilisateurAction et EnregistrerUtilisateurAction de la même classe abstraite UtilisateurAction.
    Pour ma part, je fonctionne comme ça...
    j'évite au maximum de mettre les données en session, je préfère les mettre dans la requête... ce qui permet en plus d'obliger à bien "conceptualiser" le code et le factoriser... en faisant des héritages d'Action.

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

Discussions similaires

  1. Appel de fonction par SYS qui retourne une erreur
    Par tibal dans le forum PL/SQL
    Réponses: 3
    Dernier message: 15/12/2008, 23h32
  2. shell retourne une erreur
    Par nymus7 dans le forum Langage
    Réponses: 3
    Dernier message: 07/08/2008, 18h03
  3. [MySQL] requete qui retourne une erreur a l'execution
    Par naazih dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 18/05/2008, 12h59
  4. Requete SQL qui retourne une erreur
    Par gregal dans le forum Requêtes
    Réponses: 2
    Dernier message: 15/03/2008, 23h05
  5. [MSSQL 2005] Retourner une erreure dans une SP
    Par Danny Blue dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 01/08/2006, 08h19

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