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 :

Jsp et Struts


Sujet :

Struts 1 Java

  1. #1
    Membre du Club
    Inscrit en
    Mai 2009
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 9
    Par défaut Jsp et Struts
    Salut ,
    j'ai une classe personne et une classe livre.
    la personne peut avoir plusieurs livre.
    bon , pour simplifier le problème je précise qu'une personne peut avoir 3 personne( nombre fixé).
    dans un formulaire jsp je voulais mettre un form avec struts, mais ce form doit contenir la personne et les 3 livre .
    comment mettre un formulaire pour la personne et les 3 livres avec un seul submit ?
    Merci d'avance .

  2. #2
    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
    Dans la classe Personne, tu peux définir une propriété qui correspond à une collection de livres.
    Et dans ton ActionForm, tu définis une propriété de type Personne.

  3. #3
    Membre du Club
    Inscrit en
    Mai 2009
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 9
    Par défaut
    Merci , mais c'est pas ça mon problème .
    Tout ce que vous dites dites je l'ai fait , mais la question c'est comment mettre ces 3 livres dans un form ( formulaire jsp) et les envoyer à l'actions par un seul submit ?

  4. #4
    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
    Tout simplement en mettant la collection de livres dans le formulaire.
    Je ne vois vraiment pas où est le problème.

    Montre un peu de code si tu veux qu'on t'aide avec du concret.

  5. #5
    Membre du Club
    Inscrit en
    Mai 2009
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 9
    Par défaut
    <
    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
    body>
                    <%-- create a html form --%>
                    <html:form action="personneEdit">
     
                                Name:
                         <html:text property="nompersonne" />
                             Prenom :
                         <html:text property="nompersonne" />      
                              Livre1:
                              titre :
                         <html:text property="titre" />
                            edition:
                       <html:text property="edition" />
                              Livre2:
                               titre :
                      <html:text property="titre" />
                      edition:
                      <html:text property="edition" />
     
                                Livre3:
                              titre :
                     <html:text property="titre" />
                       edition:
                      <html:text property="edition" />   
     <html:hidden property="do" value="fonctionSave" />  
     
     
     <html:submit>Save</html:submit>     
     
                    </html:form>
            </body>
    Voila , ça ne marche pas .
    le probleme c'est je dois ajouter une liste de livre , je sais comment afficher une liste , mais l'ajout c'est pas evident .
    Merci d'avance.

  6. #6
    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
    Comme je te l'ai indiqué précédemment, il faut définir une collection de livres dans le formulaire.

    Ensuite, dans la jsp, il faut utiliser les tags nested:iterate et nested:text :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <nested:iterate property="listLivres">
       <nested:text property="titre" />
       <nested:text property="edition" />
    </nested:iterate>
    La collection d'objet de type Livre est-elle initialisée avant l'affichage de la page ou doit-elle être vide ?

  7. #7
    Membre du Club
    Inscrit en
    Mai 2009
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 9
    Par défaut
    Merci pour ta réponse .
    La collection des livres elle doit être vide initialement .
    Comment itérer sans savoir le nombre , puisque c'est vide la collection ?

  8. #8
    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
    Pour pouvoir saisir au moins un livre dans la collection, il faudrait initialiser la collection d'objets de type Livre dans l'Action qui s'exécute avant l'affichage de la jsp comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    List listLivres=new ArrayList() ;
    listLivres.add(new Livre()) ;
    TonActionForm tonActionForm=(TonActionForm) form ;
    tonActionForm.setListLivres(listLivres) ;
    Si le nombre de livres à saisir est fixé à 3, comme tu l'as précisé dans ton premier post, il faut mettre 3 objets de type Livre dans la List au lieu d'un.

    Si par contre, le nombre de livres à ajouter n'est pas défini, c'est plus complexe à mettre en oeuvre.

    Dans tous les cas, tu aurais peut-être intérêt à utiliser le datagrid de Struts-Layout.

  9. #9
    Membre du Club
    Inscrit en
    Mai 2009
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 9
    Par défaut
    J'ai cru que la solution que tu as proposé marchait.. mais ,
    le formulaire s'affiche très bien cette fois , merci, mais quand je clique sur save, il me renvoie des erreurs index 0 pour la list !!!!
    J'ai procédé comme vous avez dit.
    Voici l'erreur :
    ---------------------------------------------------------
    HTTP Status 500 -

    --------------------------------------------------------------------------------

    type Exception report

    message

    description The server encountered an internal error () that prevented it from fulfilling this request.

    exception

    javax.servlet.ServletException: BeanUtils.populate
    org.apache.struts.util.RequestUtils.populate(RequestUtils.java:1254)
    org.apache.struts.action.RequestProcessor.processPopulate(RequestProcessor.java:821)
    org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:254)
    org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
    org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:525)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:729)


    root cause

    java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
    java.util.ArrayList.RangeCheck(Unknown Source)
    java.util.ArrayList.get(Unknown Source)
    org.apache.commons.beanutils.PropertyUtils.getIndexedProperty(PropertyUtils.java:521)
    org.apache.commons.beanutils.PropertyUtils.getIndexedProperty(PropertyUtils.java:428)
    org.apache.commons.beanutils.PropertyUtils.getNestedProperty(PropertyUtils.java:770)
    org.apache.commons.beanutils.PropertyUtils.getProperty(PropertyUtils.java:801)
    org.apache.commons.beanutils.BeanUtils.setProperty(BeanUtils.java:881)
    org.apache.commons.beanutils.BeanUtils.populate(BeanUtils.java:808)
    org.apache.struts.util.RequestUtils.populate(RequestUtils.java:1252)
    org.apache.struts.action.RequestProcessor.processPopulate(RequestProcessor.java:821)
    org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:254)
    org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
    org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:525)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:729)

  10. #10
    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
    Mets le scope du form-bean à session dans le mapping des Actions liées à ce form-bean.

  11. #11
    Membre du Club
    Inscrit en
    Mai 2009
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 9
    Par défaut
    Code de struts 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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
     
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd">
    <struts-config>
       <data-sources />
       <form-beans >
                <form-bean name="personneEditForm" type="struts.forms.PersonneEditForm" />
     
       </form-beans>
       <global-exceptions />
       <action-mappings >   
     
        <action
             attribute="personneEditForm"
             input="/jsp/personneEdit.jsp"
             name="personneEditForm"
             parameter="do"
             path="/personneEdit"
             scope="request"
             type="struts.actions.PersonneEditAction">
     
     
             <forward name="showAdd" path="/jsp/personneAdd.jsp" />
     <forward name="succes" path="/jsp/message.jsp" />
          />
          </action>
     
     
     
     
     
     
       </action-mappings>
     
     
    </struts-config>
    Je crois le form est déjà dans la session, sinon c'est quoi y a une erreur dans mon fichier struts config ?
    Merci d'avance.

  12. #12
    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
    Non, il n'est pas dans la session car tu as codé scope="request" dans le mapping de l'Action. Remplace request par session :
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
        <action
             attribute="personneEditForm"
             input="/jsp/personneEdit.jsp"
             name="personneEditForm"
             parameter="do"
             path="/personneEdit"
             scope="session"
             type="struts.actions.PersonneEditAction">

  13. #13
    Membre du Club
    Inscrit en
    Mai 2009
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 9
    Par défaut
    Merci , ça fonctionne enfin , j'ai changer le "scope=request" en "scopre="session".

    Merci.

  14. #14
    Membre du Club
    Inscrit en
    Mai 2009
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 9
    Par défaut
    J'ai une question :
    quand utiliser session et quand utiliser request ?
    Merci d'avance.

  15. #15
    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
    En fait, dans ton cas, je t'ai donné la solution la plus simple à ton problème qui est de mettre le scope du form-bean à session.

    Comme tu initialises le form-bean dans l'Action qui s'exécute avant l'affichage de la page, lorsque la page s'affiche, la requête est terminée.
    Donc, si tu mets le form-bean dans le scope request, lorsque tu soumets le formulaire, une nouvelle instance de l'ActionForm est créée et donc il crée aussi une nouvelle instance de List. Celle-ci est donc vide, d'où le message d'erreur.

    Si le form-bean est dans le scope session, il ne recrée pas d'instance de l'ActionForm et la List est donc toujours une List d'objets de type Livre.

    Il existe une solution avec le scope du form-bean à request en utilisant le principe des Lazy List.

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

Discussions similaires

  1. jsp html struts
    Par mannou83 dans le forum Struts 1
    Réponses: 4
    Dernier message: 26/05/2009, 13h57
  2. jsp html struts
    Par mannou83 dans le forum Webdesign & Ergonomie
    Réponses: 0
    Dernier message: 26/05/2009, 13h50
  3. Mise en route Servlet, JSP avec Struts
    Par sir_gcc dans le forum Struts 1
    Réponses: 1
    Dernier message: 24/03/2007, 18h50
  4. ASP ou JSP / Servlet (Struts) ?
    Par brousaille dans le forum Général Conception Web
    Réponses: 9
    Dernier message: 25/01/2006, 20h14
  5. [ JSP ][ MULTIBOX ] Struts Multibox checked par défaut
    Par maximus75 dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 15/06/2005, 17h30

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