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 :

Validation form avec un redirect-action


Sujet :

Struts 2 Java

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    100
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 100
    Par défaut Validation form avec un redirect-action
    Bonjour
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <action name="action1" class="action1">
            <result>maPage.jsp</result>
    </action>
    <action name="action2" class="action2">
             <result name="success">autrePage.jsp</result>
             <result name="input" type="redirect-action">action1</result>
    </action>
    L'action1 sert à afficher 'maPage.jsp'.
    Dans 'maPage.jsp' il y a un formulaire qui déclenche 'action2'.
    Si dans 'action2' il y a une erreur par rapport à la validation du formulaire, on redirige vers 'action1' pour réafficher la page avec les erreurs.

    Le problème c'est que les messages d'erreur ne s'affichent pas.
    Ils sont perdus en cours de route, parce qu'on appelle une autre action.
    Avez-vous une solution à ce problème ?
    Merci

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 111
    Par défaut
    Slt,

    Un peu de code nous aiderait beaucoup je pense. (action, jsp, struts.xml, ...)
    Cela devrait être automatique

    ++

    --

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    100
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 100
    Par défaut
    Ma jsp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <s:actionerror/>
    <s:form action="action2">
    	<s:datetimepicker name="checkin" label="checkin" displayFormat="dd/MM/yyyy" required="true"/>
    	<s:submit/>
    </s:form>
    Le formulaire est envoyé vers action2


    Dans Action2.java :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    //Champs checkin obligatoire
    @RequiredFieldValidator(type = ValidatorType.FIELD, message = "You must enter a check-in date.")
    public void setCheckin(Date checkin) {
    	this.checkin = checkin;
    }
     
    public String execute() throws Exception { 
    	 return SUCCESS;
    }
    Si je ne remplis pas le champs dans la jsp, alors l'action retourne INPUT.
    D'après mon struts.xml, on retourne alors vers l'action1, qui affiche la page.
    Le problème c'est que les messages d'erreur sont perdus entre action2 et action1.

    Je suppose que je n'applique pas la bonne méthode.
    Comment fait-on d'habitude en cas de mauvaise validation pour réafficher la page avec les messages d'erreur?

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 111
    Par défaut
    Cela pourra surement t'aider.

    http://www.developpez.net/forums/d73...-2-freemarker/

    Sinon pourquoi tu fait la vérification que lors de ton action2 ??
    Tu pourrais pas vérifier les données lors de ton action1 ?
    ++

    ---

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    45
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 45
    Par défaut
    Il me semble que ça suffit :
    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <action name="action1" class="action1">
            <result>maPage.jsp</result>
    </action>
    <action name="action2" class="action2">
             <result name="success">autrePage.jsp</result>
             <result name="input">maPage.jsp</result>
    </action>

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    100
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 100
    Par défaut
    Merci
    Mais le problème c'est que j'ai besoin de faire appel à mon action1 qui initialise des données à afficher sur la page.

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    45
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 45
    Par défaut
    Vu que c'est suite à une validation, tu n'a normalement pas besoin de réinitialiser la page.
    As-tu essayé la configuration que j'ai posté au dessus ?

  8. #8
    Membre Expert
    Avatar de muad'dib
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2003
    Messages
    1 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2003
    Messages : 1 013
    Par défaut
    J'ai le même problème que le PO. As-tu trouvé une solution ?

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 5
    Par défaut
    Salut !

    Bon 2 ans plus tard, j'ai un peu le même soucis. Même si je pense que les intervenants du post sont passés à autre chose, ce que j'ai trouvé pourrait toujours être utile à d'autres.

    @gpmoo7: Non si on met directement le jsp ou le tile en sortie, les traitements de la classe ActionSupport ne seront pas rejoués, et les fichiers properties liés à cette classe ne seront pas chargés non plus. C'est pour ça que la redirection est un choix qui s'impose dans certains cas.

    Il faut savoir que le problème du redirect action ne s'étend pas seulement aux messages d'erreurs mais aussi aux champs remplis par l'utilisateur : au rechargement de la page, ceux-ci ne seront plus remplis !

    Au final, il y a deux possibilités:

    - Soit on envoie en paramètre de l'action action1 (pour reprendre l'exemple) toutes les données (champs et erreurs). On fera comme cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <param name="fieldErrors">%{fieldErrors}</param>
    <param name="checkin">%{checkin}</param>
    Le problème est que fieldErrors est un Map qui n'accèptera et que le passage via param le convertie en String (il passe dans l'url). Du coup il faut se débrouiller avec une conversion pour le retransformer en map, par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    	public void setFieldErrors(String iAlerts) {
    		String[] fields = iAlerts.replace("{", "")
    						.replace("}", "")
    						.replace("[", "")
    						.replace("]", "")
    						.split(",");
    		for(int i=0; i<fields.length; i++){
    			addFieldErrors(fields[i].split("=")[0], fields[i].split("=")[1]);
    		}
    	}
    - Soit on passe par les variables Session, et là c'est un peu à chacun de voir comment faire. Par exemple sauvegarder un objet d'une classe définissant le formulaire avec champs et erreurs est pas mal.

    PS: Attention, si vous remplissez le ErrorFields de action1 avant que sa fonction validate() ne s'execute, il faut lui mettre le result "input".

Discussions similaires

  1. [PHP 5.0] Valider form avec un checkbox
    Par Invité dans le forum Langage
    Réponses: 3
    Dernier message: 07/08/2011, 00h31
  2. action form avec proprieté tableau de String
    Par toure32 dans le forum Struts 1
    Réponses: 1
    Dernier message: 21/03/2008, 09h34
  3. Réponses: 2
    Dernier message: 01/10/2007, 10h27
  4. [VB.net][VS2005] Validation d'une form avec errorProvider
    Par WriteLN dans le forum Windows Forms
    Réponses: 6
    Dernier message: 12/05/2006, 13h02
  5. Réponses: 3
    Dernier message: 02/12/2004, 08h50

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