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 :

Comment récupérer les lignes d'un tableau dans un formulaire ?


Sujet :

Struts 1 Java

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    36
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 36
    Points : 32
    Points
    32
    Par défaut Comment récupérer les lignes d'un tableau dans un formulaire ?
    Bonjour toutes et tous.

    Je cherche à récupérer les données que j’affiche dans un tableau à l'aide balises struts et je sèche sur la solution.

    Voici le code initial de ma jsp liste.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
     
    <html:form action="monAction.do" enctype="multipart/form-data">
      <table width="100%">
        <logic:notEmpty name="listePiecesJointes" property="piecesJointes"
        scope="request">
     
          <logic:iterate id="piece" name="listePiecesJointes"   
          property="piecesJointes" indexId="pjIndex">
    	<tr style="position:relative;">
    	  <td width="45%" align="left">
                <a href="toto.jsp"><bean:write name="piece" property="id" /></a>
              </td>
    	</tr>
          </logic:iterate>
        </logic:notEmpty>
      </table>
      <html:submit/>
    </html:form>
    Logic à cet instant de ne pas récupérer la liste des données dans le formulaire
    J’ai donc juste ajouter la ligne avant la fin de la balise <tr>.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <html:hidden property='<%=\"piece[\"+pjIndex+\"].id\" %>' styleId='<%=\"piece[\"+pjIndex+\"].id\" %> '/>
    Dans mon form ListePiecesJointes j’ai les methodes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    private List piecesJointes = new ArrayList() ;
     
    public List getPiecesJointes(){
    	return piecesJointes ;
    }
     
    public PieceJointeForm getPiece(int index){
    	return piecesJointes.get(index);
    }
    Et dans PieceJointeForm la méthode

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    String id ="";
    public String getId(){
            return id;
    }
    Sauf que là j'ai une erreur au moment d'afficher les données :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    javax.servlet.ServletException: No getter method for property piece[0].id of bean org.apache.struts.taglib.html.BEAN
    Pourquoi ne trouve t il pas ma méthode ?
    la solution que j'envisage est elle correcte ?

    Je suis sur un serveur Tomcat avec Eclipse.

    Merci pour votre aide

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 372
    Points : 239
    Points
    239
    Par défaut
    Heu là apres un rapide coup d'oiel je dirais que la method qu'il cherche c'est ...ce qui n'est pas le top
    En effet il cherche cette method du fait que tu as dans ton html:hidden:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    property='<%=\"piece[\"+pjIndex+\"].id\" %>'
    Tu cherches à faire quoi en fait? parce que je n'ai pas tout à fait compris :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <table width="100%">
        <logic:notEmpty name="listePiecesJointes" property="piecesJointes"
        scope="request">
     
          <logic:iterate id="piece" name="listePiecesJointes"   
          property="piecesJointes" indexId="pjIndex">
    	<tr style="position:relative;">
    	  <td width="45%" align="left">
                <a href="toto.jsp"><bean:write name="piece" property="id" /></a>
              </td>
    	</tr>
          </logic:iterate>
        </logic:notEmpty>
      </table>
    Ca te sert à afficher la liste "listePiecesJointes" que tu met en session depuis une action....
    Pourquoi as-tu besoin d'un form? et d'un champ hidden?

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 376
    Points : 431
    Points
    431
    Par défaut
    Oui, c'est vrai que l'intérêt du truc ne saute pas aux yeux .
    Ce que dit AnneB est vrai, si tu passes par du code java, il faut que tu utilises les getters, et non les noms d'attributs.
    Mais, après ça, si tu veux récupérer la valeur de ton champ caché, tu risques d'avoir des problèmes. Pour récupérer des champs contenus dans un iterate, voici ce qu'il faut faire :

    - Code JSP, dans l'iterate :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <html:hidden name="piece" property="id" styleId="piece[${pjIndex}].id" indexed="true"/>
    Vire le styleId si tu n'en a pas besoin, ca évitera du code un peu lourd.

    - Dans ton form, tu as besoin de définir des méthodes pour accéder aux éléments de ta liste

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    List<PieceJointe> piecesJointes = new ArrayList<PieceJointe>();
     
    [...]
     
    public PieceJointe getPiece(int index) {
    	return getPiecesJointes().get(index);
    }
     
    public void setPiece(int index, PieceJointe pj) {
    	getPiecesJointes().set(index, pj);
    }
    (avec getPiece() / setPiece() car dans ton iterate tu utilises "piece" comme "id")

    parce que, apparemment, Struts est incapable d'accéder, en tout cas en écriture, sur les éléments d'une liste.

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    36
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 36
    Points : 32
    Points
    32
    Par défaut
    En fait j'aimerai bien que struts gère la chose comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    getPiece(0).getid();
    Tu cherches à faire quoi en fait? parce que je n'ai pas tout à fait compris
    J'explique un peu plus.

    J'ai un <htm:file/> à la fin de mon formulaire et un bouton télécharger qui appelle une fonction javascript pour submiter le formulaire. (D'autres boutons on le même rôle mais pour des action différentes). Voilà une version plus complète de ma jsp. En espérant que ça éclaircisse mon problème.

    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
     
    html:form action="monAction.do" enctype="multipart/form-data">
      <table width="100%">
        <logic:notEmpty name="listePiecesJointes" property="piecesJointes"
        scope="request">
     
          <logic:iterate id="piece" name="listePiecesJointes"   
          property="piecesJointes" indexId="pjIndex">
    	<tr style="position:relative;">
    	  <td width="45%" align="left">
                <a href="toto.jsp"><bean:write name="piece" property="id" /></a>
              </td>
    	</tr>
          </logic:iterate>
        </logic:notEmpty>
      </table>
      <html:file name="listePiecesJointes" property="nouveauFichier"></html:file>
      <input type="button" class="button"   
      onclick="javascript:telecharger(window.document.forms[0], '<html:rewrite    
      action= "attacherPieceJointe"/>');" value="Télécharger" />
    </html:form>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    function telecharger(form, actionToPerform){
      form.action = actionToPerform;
      form.submit;
    }
    listePiecesJointes je l'ai mis dans la requête de mon action précédente comme ceci.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    request.setAttribute("listePiecesJointes", listePiecesJointesForm);
    Pour résumer lors l'action "télécharger", je fais un validate sur mon form qui est une instance de ListePiecesJointesForm et j'ai besoin dans cette méthode de la liste des pièces jointes qui sont affichées. Je cherche donc à les récupérer.

    Ai je été clair ?

    Merci pour l'aide

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    376
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 376
    Points : 431
    Points
    431
    Par défaut
    cf. mon post précédent...

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    36
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 36
    Points : 32
    Points
    32
    Par défaut
    Merci pour l'aide mixouille. Tu m'as sorti d'affaire. Ce que j'utilise comme solution:

    liste.jsp, avant le </tr> je met

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <html:hidden name="piece" property="id"  indexed="true"/>
    <html:hidden name="piece" property="nom"  indexed="true"/>
    <html:hidden name="piece" property="taille"  indexed="true"/>
    <html:hidden name="piece" property="dateModification" indexed="true"/>
    <html:hidden name="piece" property="dateCreation" indexed="true"/>
    Ce qui me génère en html
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <input type="hidden" name="piece[0].id" value="42">
    <input type="hidden" name="piece[0].nom"   
      value="ValidationJavaXMLSchema.pdf">
    input type="hidden" name="piece[0].taille" value="95730">
    <input type="hidden" name="piece[0].dateModification" value="20/07/2007">
    <input type="hidden" name="piece[0].dateCreation" value="">
    Je ne connaissais pas le "indexed". Et dans ListePiecesJointesForm j'utilise lors du submit cette méthode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public PieceJointeForm getPiece(int index) {
        	while (index >= piecesJointes.size()){
        		piecesJointes.add(new PieceJointeForm());
        	}
            return (PieceJointeForm)piecesJointes.get(index);
        }
    Ca marche nickel comme je veux.

    Merci

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 03/06/2011, 20h29
  2. [MySQL] Comment afficher une ligne d'un tableau dans un formulaire en la selectionnant
    Par eddycool dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 13/05/2009, 15h49
  3. Réponses: 6
    Dernier message: 13/05/2009, 15h26
  4. Comment mettre les lignes d'un fichier dans un tableau en shell
    Par Ombrius dans le forum Shell et commandes GNU
    Réponses: 3
    Dernier message: 23/10/2006, 12h34
  5. Réponses: 2
    Dernier message: 15/09/2006, 12h18

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