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 2 Java Discussion :

Valider les informations en entrée avant une action


Sujet :

Struts 2 Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2006
    Messages : 121
    Par défaut Valider les informations en entrée avant une action
    Bonsoir,

    Je souhaite faire un formulaire pré rempli, éditable par l'utilisateur.

    J'utilise donc :
    - des textfield
    - une action show qui me rempli les champs et récupère quelques autres infos (implements preparable)
    - une action save qui valide ce que rentre l'utilisateur et enregistre les nouvelles données.

    Je distingue 4 cas possibles :
    - l'affichage simple de la feuille.
    - l'annulation des modifications par l'utilisateur
    - la validation des champs
    - l'enregistrement des infos.

    Seulement voilà :s
    Je vous montre mon struts.xml pour mieux comprendre:
    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
            <action name="showEnt" class="com.formation.struts.actions.Entreprise_showAction">
                <interceptor-ref name="store">
                   <param name="operationMode">RETRIEVE</param>
                </interceptor-ref>          
                <interceptor-ref name="webFormation.interceptors"/>
                <result name="success" type="tiles">site.contact.showEntreprise</result>
                <result name="input" type="tiles">site.contact.showEntreprise</result>
            </action>
    
            <action name="saveEnt" class="com.formation.struts.actions.Entreprise_saveAction">
                <interceptor-ref name="store">
                    <param name="operationMode">STORE</param>
                </interceptor-ref>
                <interceptor-ref name="webFormation.interceptors"/>
                <result name="success" type="redirect-action">
                    <param name="actionName">showEnt</param>
                    <param name="id">${ent.id}</param>
                </result>
                <result name="input" type="redirect-action">
                    <param name="actionName">showEnt</param>
                    <param name="id">${ent.id}</param>
                </result>      
            </action>
    L'annulation renvoit INPUT, et fait donc un redirect action de saveEnt vers showEnt. Pas de pb.

    L'enregistrement renvoit un SUCCESS, et fait aussi un redirect action de saveEnt à showEnt. Tjs pas de pb.

    Par contre, la validation de l'enregistrement est la suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    @Override public void validate() {
            if (--pb avec mes champs--) {
                addActionError("Vous devez renseigner les champs obligatoires.") ;
            }
        }
    Et on dirait que le addActionError "intercepte" le INPUT associé, ce qui empêche le redirect-action vers le showEnt.
    Resultat: mon formulaire est vide avec seulement le message d'erreur !


    Impossible de faire une validation des champs dans ces conditions.

    Pleaz help

  2. #2
    Membre averti
    Inscrit en
    Avril 2008
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 18
    Par défaut
    Pour recuperer les valeurs rentrées dans les champs il faut passer par un des intercepteurs du tas par defaut, je ne sais plus lequel exactement (le conversioninterceptor je crois).

    Donc comme tu declares un intercepteur dans ton action saveEnt, ton action ne passe que par cet intercepteur et ne passe plus par l intercepteur necessaire pour recuperer les valeurs saisies. Si tu veux passer par les intercepteurs de base il te faut rajouter dans ton action un intercepteur ref qui a pour nom le nom du tas d intercepteur de base "defaultStack". La tu devrais normalement avoir des champs non vide.

  3. #3
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2006
    Messages : 121
    Par défaut
    Salut Séraphon,

    Merci bcp pour ta réponse, je crois que tu as pointé le truc qui cloche.
    J'ai bien mon intercepteur defaultStack de déclaré dans ma pile webFormation.interceptors.

    Elle ressemble à ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
            <interceptors>
                <interceptor name="hibernateSession" class="com.formation.util.HibernateSessionInterceptor" />            
                <interceptor-stack name="webFormation.interceptors">
                        <interceptor-ref name="hibernateSession" />
                        <interceptor-ref name="defaultStack" /> 
                </interceptor-stack>
            </interceptors>
            <default-interceptor-ref name="webFormation.interceptors"/>
    Le problème par contre est au niveau de l'ordre des intercepteurs.

    Dans mon action showEnt, je les avais placé dans cet ordre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <interceptor-ref name="store">
                    <param name="operationMode">RETRIEVE</param>
                </interceptor-ref>
                <interceptor-ref name="webFormation.interceptors"/>
    Si j'inverse la pile d'intercepteur et le store:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
                <interceptor-ref name="webFormation.interceptors"/>            
                <interceptor-ref name="store">
                   <param name="operationMode">RETRIEVE</param>
                </interceptor-ref>
    Ma validation fonctionne, annule l'action saveEnt et m'affiche bien les champs, par contre, plus de message d'erreur

    Il faudrait peut etre que je détaille le defaultStack en précisant les intercepteurs et leur ordre
    Mais euh... il y a quoi dans defaultStack ?

  4. #4
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2006
    Messages
    121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2006
    Messages : 121
    Par défaut
    Bon finalement, en inversant simplement le retrieve et le defaultStack, en cas d'erreur, il me réinitialise la page et affiche tout de meme le message d'erreur.

    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
            <action name="showEnt" class="com.formation.struts.actions.Entreprise_showAction">
                <interceptor-ref name="webFormation.interceptors"/>
                <interceptor-ref name="store">
                   <param name="operationMode">RETRIEVE</param>
                </interceptor-ref>          
                <result name="success" type="tiles">site.contact.showEntreprise</result>
                <result name="input" type="tiles">site.contact.showEntreprise</result>
            </action>
    
            <action name="saveEnt" class="com.formation.struts.actions.Entreprise_saveAction">
                <interceptor-ref name="store">
                    <param name="operationMode">STORE</param>
                </interceptor-ref>
                <interceptor-ref name="webFormation.interceptors"/>
                <result name="success" type="redirect-action">
                    <param name="actionName">showEnt</param>
                    <param name="id">${ent.id}</param>
                </result>
                <result name="input" type="redirect-action">
                    <param name="actionName">showEnt</param>
                    <param name="id">${ent.id}</param>
                </result>      
            </action>
    Ce qu'a tapé l'utilisateur n'est pas gardé. Mais bon. Cela ira pour le moment.
    Encore merci pour ton coup de pouce.

    Bonne journée.

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

Discussions similaires

  1. Récuperer les informations rechercher entre FORMS
    Par Minotec85 dans le forum VB.NET
    Réponses: 5
    Dernier message: 27/04/2008, 12h36
  2. Réponses: 2
    Dernier message: 03/01/2008, 12h42
  3. Valider les $_POST en masse par une fonction
    Par Marshall_Mathers dans le forum Langage
    Réponses: 4
    Dernier message: 15/09/2007, 23h02
  4. [SQL] Lister les méthodes et les paramètres d'entrée d'une classe
    Par arnolem dans le forum PHP & Base de données
    Réponses: 11
    Dernier message: 11/08/2006, 19h55
  5. [MySQL] Supprimer les informations des champs dans une table (suite)
    Par snakejl dans le forum PHP & Base de données
    Réponses: 17
    Dernier message: 26/05/2006, 15h37

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