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 :

formulaire sur plusieurs pages


Sujet :

Struts 1 Java

  1. #1
    Membre très actif
    Inscrit en
    Juin 2007
    Messages
    161
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 161
    Par défaut formulaire sur plusieurs pages
    je souhaite faire un formulaire sur plusieurs pages.

    donc j'ai un premier formulaire 'loginForm.jsp' :

    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
     
    <%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %>
    <%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %>
    <%@ taglib uri="http://struts.apache.org/tags-nested" prefix="nested" %>
     
    <html:html>
    <head>
    <title>Page login</title>
    </head>
     
    <body>
     
    <html:form action="/Input" method="post">
     
    <nested:nest property="personne">
     
    Login <nested:text property="login" /><br />
    Mot de passe <nested:text property="mdp" /><br />
     
    <html:submit value="Soumettre"/>
     
    </nested:nest>
    </html:form>
     
    </body>
    </html:html>
    qui renvoie sur un deuxieme formulaire adresseForm.jsp :
    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
    <%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %>
    <%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %>
    <%@ taglib uri="http://struts.apache.org/tags-nested" prefix="nested" %>
     
    <html:html>
    <head>
    <title>Page adresse</title>
    </head>
     
    <body>
     
    <nested:root name="loginForm">
     
    <html:form action="/InputAdresse" method="post">
     
    <nested:nest property="personne">
    Login : <bean:write name="loginForm" property="login" scope="request" /><br>
    Mot de passe : <bean:write name="loginForm" property="mdp" scope="request" /><br />
     
    <nested:nest property="adresse">
     
    Numero de rue : <nested:text property="numRue" /><br />
    Rue : <nested:text property="rue" /><br />
    Code postal : <nested:text property="codePostal" /><br />
    Ville : <nested:text property="ville" /><br />
     
    </nested:nest>
    </nested:nest>
     
    <html:submit value="Soumettre"/>
     
     
    </html:form>
    </nested:root>
     
    </body>
    </html:html>
    j'ai donc des balises emboitées pour représenter les objets qui contiennent les attributs des deux formulaires.

    L'objet 'Login' contient un objet 'Adresse'.

    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
    package technote.beans;
     
    import java.io.Serializable;
     
    public class Login implements Serializable {
     
    	private String login;
    	private String mdp;
    	private Adresse adresse = new Adresse();
     
    	public String getLogin() {
    		return login;
    	}
    	public void setLogin(String login) {
    		System.out.print("****** on passe dans setLogin(). ******");
    		this.login = login;
    	}
    	public String getMdp() {
    		return mdp;
    	}
    	public void setMdp(String mdp) {
    		System.out.print("****** on passe dans setMdp(). ******");
    		this.mdp = mdp;
    	}
     
    }
    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
    package technote.beans;
     
    import java.io.Serializable;
     
    public class Adresse implements Serializable {
     
    	private String numRue;
    	private String rue;
    	private String codePostal;
    	private String ville;
     
    	public String getCodePostal() {
    		return codePostal;
    	}
     
    	public void setCodePostal(String codePostal) {
    		this.codePostal = codePostal;
    	}
     
    	public String getNumRue() {
    		return numRue;
    	}
     
    	public void setNumRue(String numRue) {
    		this.numRue = numRue;
    	}
     
    	public String getRue() {
    		return rue;
    	}
     
    	public void setRue(String rue) {
    		this.rue = rue;
    	}
     
    	public String getVille() {
    		return ville;
    	}
     
    	public void setVille(String ville) {
    		this.ville = ville;
    	}
     
    }
    j'ai mappé dans le fichier de config:
    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
    <?xml version="1.0" encoding="UTF-8"?>
    <struts-config>
      <form-beans>
        <form-bean name="loginForm" type="technote.actionform.LoginForm" />
      </form-beans>
      <action-mappings>
        <action path="/Input" 
        input="/pages/loginForm.jsp"  
        name="loginForm" 
        type="org.apache.struts.actions.ForwardAction" 
        parameter="/pages/adresseForm.jsp" 
        scope="request" />
        <action path="/InputAdresse" 
        name="loginForm" 
        input="/pages/adresseForm.jsp" 
        parameter="/pages/affiche.jsp" 
        scope="request" />
      </action-mappings>
      <message-resources parameter="MessageResources"/>
    </struts-config>
    Mais je vois pas bien comment créer le actionForm 'LoginForm.java' qui va bien. Dans un tuto, il instancient un objet Login, mais ce ne fonctionne pas bien:
    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
    package technote.actionform;
     
    import org.apache.struts.action.ActionForm;
    import technote.beans.Login;
     
    public class LoginForm extends ActionForm {
     
    	private Login personne = new Login();
     
    	public Login getPersonne() {
    		return this.personne;
    	}
     
    	public void setPersonne(Login personne) {
    		this.personne = personne;
    	}
    }
    j'ai une erreur qui me dit que je n'ai pas de getter pour le form:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    No getter method for property: "login" of bean: "loginForm"
    Est ce quelqu 'un peu m'aider pour avoir l'actionForm qui va bien ?

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    372
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 372
    Par défaut
    ajoute dans le LoginForm :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public String getLogin(){
    return this.personne.getLogin();
    }
    public void setLogin(String login){
    this.personne.setLogin(login);
    }
    En fait quand tu met dans une balise pour afficher un truc qui vient de la session, si tu fais un property="myProperty", il faut alors forcément que tu aies dans le bean correspondant une méthode getMyProperty()...... Sinon ca met qu'il manque un getter....et pareil pour le set.....

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    376
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 376
    Par défaut
    C'est même encore plus fort, puisque l'utilisation de property="myProperty" ne provoquera que l'utilisation des getters et setters. L'existence de l'attribut "myProperty" est tout-à-fait facultative, tes accesseurs peuvent très bien servir à transformer une donnée par exemple :

    Dans ton form :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    private int test;
     
    private String getTestString() {
       return String.valueOf(test);
    }
     
    private void setTestString(String testString) {
       try {
          test = Integer.parseInt(testString);
       } catch (Exception e) {
          test = 0;
       }
    }
    Dans ta JSP :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <html:text property="testString"/>
    Et tout ça par la magie (la bidouille ?) de la réflexion !

    Bon, j'ai pas lu ton post en détail, donc je suis peut-être hors sujet, mais ca servira bien à quelqu'un un jour, non ?

  4. #4
    Membre très actif
    Inscrit en
    Juin 2007
    Messages
    161
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 161
    Par défaut
    Citation Envoyé par mixouille
    C'est même encore plus fort, puisque l'utilisation de property="myProperty" ne provoquera que l'utilisation des getters et setters. L'existence de l'attribut "myProperty" est tout-à-fait facultative, tes accesseurs peuvent très bien servir à transformer une donnée par exemple :

    Dans ton form :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    private int test;
     
    private String getTestString() {
       return String.valueOf(test);
    }
     
    private void setTestString(String testString) {
       try {
          test = Integer.parseInt(testString);
       } catch (Exception e) {
          test = 0;
       }
    }
    Dans ta JSP :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <html:text property="testString"/>
    Et tout ça par la magie (la bidouille ?) de la réflexion !

    Bon, j'ai pas lu ton post en détail, donc je suis peut-être hors sujet, mais ca servira bien à quelqu'un un jour, non ?

    oui je vois ca peut etre utile un jour. Ca permet de tester la valeur d'un attribut pour en fait retenir la valeur renvoyee par le test, sympa.

    Merci AnneB pour la reponse qui est un peu plus en rapport que celle de mixouille ^^

    En fait j'ai.
    Un bean Login.
    Un bean Adresse.
    Login contient un attribut adresse de type Adresse.

    Est il possible d'utiliser un objet Login dans l'actionForm, plutot que de redefinir tous les getters et les setters des attributs qui se trouvent dans la hyerarchie des objets ?

    (je sais pas si ma question est claire)

  5. #5
    Membre expérimenté Avatar de Sceener
    Inscrit en
    Mai 2007
    Messages
    231
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 231
    Par défaut
    un formulaire correspondant à un et à un seul bean.

  6. #6
    Membre très actif
    Inscrit en
    Juin 2007
    Messages
    161
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 161
    Par défaut
    dans le cas d'un formulaire sur une page je veux bien, mais pour un formulaire sur plusieurs c'est pas aussi simple, non ?

  7. #7
    Membre expérimenté Avatar de Sceener
    Inscrit en
    Mai 2007
    Messages
    231
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 231
    Par défaut
    si les données qui t'intéressent mais les comme attribut de session et récupére les au fur et à mesure que tu en as besoin .

  8. #8
    Membre très actif
    Inscrit en
    Juin 2007
    Messages
    161
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 161
    Par défaut
    c un peu bourrin comme solution

  9. #9
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    376
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 376
    Par défaut
    Si tu veux juste récupérer tes valeurs, un tag JSTL suffit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <c:out value="${loginForm.login}" />
    <c:out value="${loginForm.adresse.rue}" />
    ou, sans même avoir besoin d'ajouter les libs JSTL (si tu es en JSP 2.0, où le langage EL est compris nativement) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ${loginForm.login}
    ${loginForm.adresse.rue}
    Sinon, si tu as besoin de poster ces valeurs (pour modifier un champ de ton adresse par exemple), tu peux définir un bean "intermédiaire" (je ne sais pas si ca marche) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    <bean:define id="monAdresse" name="loginForm" property="adresse"/>
    <html:text property="rue" name="monAdresse" />
    ou passer par des balises struts "nested", que je connais mal, mais qui sont censées se charger de ce genre de problème (ca ca marche, mais je sais plus comment ).

  10. #10
    Membre très actif
    Inscrit en
    Juin 2007
    Messages
    161
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 161
    Par défaut
    oui voila, c'est justement que je passe par les balises 'nested'. j'ai compris leur fonctionnement, mais c'est du cote actionForm..

    Je vois pas bien comme faire correspondre le actionForm avec la hyerarchie de classes utilisée par les balises 'nested'

  11. #11
    Expert confirmé

    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
    Par défaut
    Il est normal que tu obtiennes ce message d'erreur :
    No getter method for property: "login" of bean: "loginForm"
    étant donné que tu as codé ceci dans la jsp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <bean:write name="loginForm" property="login" scope="request" />
    et que tu n'as effectivement pas de propriété login dans ton ActionForm.

    Si tu veux utiliser les tags nested, il faut les utiliser partout.

    Par contre, moi j'aurais plutôt appelé login la propriété de type Login dans l'ActionForm et identifiant la propriété de type String de la classe Login.

    Donc, remplace les tags bean:write par des tags nested :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <nested:nest property="login">
    Login : <nested:write property="identifiant"/><br>
    Mot de passe : <nested:write property="mdp"/><br />
    </nested:nest>
    et dans l'ActionForm, il suffit de déclarer la propriété de type Login avec getter et setter.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public class LoginForm extends ActionForm
     {
    	private Login login= new Login();
     
    	public Login getLogin() {
    		return this.login;
    	}
     
    	public void setLogin(Login login) {
    		this.login= login;
    	}
    }
    Et dans la classe Login, n'oublie pas de coder getter et setter sur la propriété de type Adresse.

  12. #12
    Membre très actif
    Inscrit en
    Juin 2007
    Messages
    161
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 161
    Par défaut
    Merci beaucoup, je viens de faire les modifs que tu m'a indiquées et ca marche nickel !

    Donc si j'ai bien compris c'etait une erreur dans l'emploi de la balise <bean:write name="".. au lieu de <nested:write ...

    Je suis content de voir que la technique, d'instancier un objet dans le actionForm marche bien, je commencais a me demander si cette technique est vraiement valable.

    Merci.

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

Discussions similaires

  1. Formulaire sur plusieurs pages
    Par sir_gcc dans le forum Struts 1
    Réponses: 5
    Dernier message: 09/04/2007, 21h22
  2. Formulaire sur plusieurs pages qui bloque
    Par yiuche dans le forum Langage
    Réponses: 7
    Dernier message: 03/08/2006, 09h23
  3. Formulaire sur plusieur pages ?
    Par Phenomenium dans le forum Langage
    Réponses: 15
    Dernier message: 25/01/2006, 13h52
  4. Un formulaire sur plusieurs page
    Par gophette dans le forum Langage
    Réponses: 3
    Dernier message: 18/01/2006, 08h11
  5. Formulaire sur plusieurs pages
    Par Gourouni dans le forum ASP
    Réponses: 23
    Dernier message: 09/12/2005, 10h17

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