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 :

[Struts+iterate] Problème de récupération de champs texte d'un pojo à l'intérieur d'une List


Sujet :

Struts 1 Java

  1. #1
    Membre averti Avatar de Drakiss
    Homme Profil pro
    Consultant MOE
    Inscrit en
    Octobre 2010
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Consultant MOE
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2010
    Messages : 185
    Points : 435
    Points
    435
    Par défaut [Struts+iterate] Problème de récupération de champs texte d'un pojo à l'intérieur d'une List
    Bonjour, c'est la première fois que je demande de l'aide sur ce forum car j'y suis depuis longtemps connecté vu la qualité des réponses et la quantité des questions en ayant toujours trouvé mon bonheur, mais là je sèche, et espère trouver une personne qui voudra bien se pencher sur mon soucis.

    Mon problème est le suivant, je doit afficher une liste d'élèves qui contiennent entre autre deux champs texte contenant des commentaires et qui peuvent être éditer sur une page JSP.

    L'affichage se fait sans problèmes mais je récupère toujours une liste vide dans mon action...

    voila les codes permettant de mieux comprendre.

    struts-config.xml
    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
     
    <form-bean name="ListeEtudiantsForm" type="scolarite.bean.ListeEtudiants"/>
     
    <action
            	path="/modifierTout"
            	name="ListeEtudiantsForm"
            	input="/jsp/Liste.jsp"
            	validate="false"
            	scope="request"
            	type="action.ModifierToutAction"
            	parameter="valider">
            	<forward name="retour" path="/accueil.do"></forward>
            	<forward name="valider" path="/jsp/errors.jsp"></forward>
            	<forward name="erreur" path="/jsp/errors.jsp"></forward>
            	<forward name="non" path="/jsp/NonAutorise.jsp"/>
            	</action>
    la classe listeetudiants

    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
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
     
    package scolarite.bean;
     
    import java.util.ArrayList;
     
    import org.apache.struts.action.ActionForm;
     
    import scolarite.base.AccesTables;
     
    @SuppressWarnings("serial")
    public class ListeEtudiants extends ActionForm{
    	private  ArrayList<EtudiantOP> listeEtudiants = new ArrayList<EtudiantOP>();
    	public ListeEtudiants(){
     
    	}
    	public ListeEtudiants (String annee, String classe,String ordre, int orderBy){
    		AccesTables acces = new AccesTables();
    		this.listeEtudiants=(ArrayList<EtudiantOP>) acces.getListeEtudiants(annee, classe, orderBy, ordre);
    	}	
    	/**
             * @return the listeEtudiants
             */
    	public ArrayList<EtudiantOP> getListeEtudiants() {
    		return listeEtudiants;
    	}
    	/**
             * @param listeEtudiants the listeEtudiants to set
             */
    	public void setListeEtudiants(ArrayList<EtudiantOP> listeEtudiants) {
    		this.listeEtudiants = listeEtudiants;
    	}
     
    	/**
             * @param int the id of the EtudiantOP to find
             * 
             * @return the EtudiantOP selected by his id
             */
     
    	public EtudiantOP findEtudiantById(int id){
    		for (int i=0;i<listeEtudiants.size();i++){
    			if (Integer.parseInt(listeEtudiants.get(i).getId_op())==id){
    				return listeEtudiants.get(i);
    			}
    		}
     
    		return null;
    	}
     
    	/**
             * @param index
             * @return
             * @see java.util.ArrayList#get(int)
             */
    	public EtudiantOP get(int index) {
    		return listeEtudiants.get(index);
    	}
    	/**
             * @return
             * @see java.util.ArrayList#size()
             */
    	public int size() {
    		return listeEtudiants.size();
    	}
    }
    le bout de ma jsp contenant la liste :

    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
     
    <table>	
    	<th>ID</th>
    		<th><html:link href="${pageContext.request.contextPath}/choixList.do?orderBy=nom">Nom</html:link></th>
    		<th><html:link href="${pageContext.request.contextPath}/choixList.do?orderBy=prenom">Pr&eacute;nom</html:link></th>
    		<th>Proposition CE</th>
    		<th>Copier</th>
    		<th>D&eacute;cision CE</th>	
    		<html:form action="/modifierTout.do" method="POST" focus="proposition" >	
    		<logic:iterate property="listeEtudiants" id="EtudiantOP" name="listeEtudiantsBean" indexId="i" scope="session">
    		<tr class="tuples2" >
    		<td  align="center"><bean:write name="EtudiantOP" property="id_op"/></td>
    		<td  align="center"><bean:write name="EtudiantOP" property="nom"/></td>
    		<td  align="center"><bean:write name="EtudiantOP" property="prenom"/></td>
    		<td  align="center"><html:text name="EtudiantOP" property="proposition" size="32" indexed="true"></html:text></td>
    	<td  align="center"><a href="${pageContext.request.contextPath}/copier.do?id=${EtudiantOP.id_op}"><html:img src="images/button.PNG"></html:img></a></td>
    	<td  align="center"><html:text name="EtudiantOP" property="decision"  size="32" indexed="true"></html:text></td>
    </tr>
    </logic:iterate>
    <tr>
    <td colspan="6">
    <center>					
    <html:submit property="valider" ><bean:message key="validerListe.retour"/></html:submit>&nbsp;&nbsp;&nbsp;<html:submit property="valider"><bean:message key="validerListe.valider"/></html:submit>	
    </center>
    </td></tr>
    </html:form>
    </table>
    et le bout de ma LookupDispatchAction pour récupérer le formulaire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public ActionForward valider(ActionMapping mapping, ActionForm form,
    			HttpServletRequest request, HttpServletResponse response)
    	throws Exception {
     
    		ListeEtudiants liste = (ListeEtudiants) form;
     
    		System.out.println("ListSizeAfter"+liste.size());
    Voila, un grand merci d'avance pour celui qui trouve, et m'enlèvera une énorme épine du pied !!!
    I
    Aussi haut que soit le trône on n'est jamais assis que sur son cul...

  2. #2
    Membre actif Avatar de DarkMolo
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    207
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Maroc

    Informations forums :
    Inscription : Juillet 2006
    Messages : 207
    Points : 277
    Points
    277
    Par défaut
    Salut,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <logic:iterate property="listeEtudiants" id="EtudiantOP" name="listeEtudiantsBean" indexId="i" scope="session">
    "listeEtudiantsBean" est rempli quand?
    Certified SCJP 5.0 / SCWCD 5.0 / SCEA 5.0
    C'est une grande folie de vouloir être sage tout seul.
    Duc de La Rochefoucauld

  3. #3
    Expert éminent

    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
    Points : 7 778
    Points
    7 778
    Par défaut
    Pour pouvoir récupérer la liste modifiée, c'est l'objet listeEtudiants du form-bean ListeEtudiantsForm qu'il faut référencer dans le tag logic:iterate :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <logic:iterate name="ListeEtudiantsForm" property="listeEtudiants" id="EtudiantOP" indexId="i">
    C'est donc cet objet qu'il faut initialiser via le setter setListeEtudiants avant l'affichage du formulaire.

    Et il faut mettre le form-bean ListeEtudiantsForm dans le scope session :
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <action
            	path="/modifierTout"
            	name="ListeEtudiantsForm"
            	input="/jsp/Liste.jsp"
            	validate="false"
            	scope="session"
            	type="action.ModifierToutAction"
            	parameter="valider">
            	<forward name="retour" path="/accueil.do"></forward>
            	<forward name="valider" path="/jsp/errors.jsp"></forward>
            	<forward name="erreur" path="/jsp/errors.jsp"></forward>
            	<forward name="non" path="/jsp/NonAutorise.jsp"/>
     </action>
    Sinon, je te conseille d'utiliser les tags nested : il n'est dans ce cas pas nécessaire d'utiliser les tags indexés et de coder getter et setter indexés dans l'ActionForm :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <nested:iterate property="listeEtudiants" id="EtudiantOP">
    <tr class="tuples2" >
    	<td  align="center"><nested:write property="id_op"/></td>
    	<td  align="center"><nested:write property="nom"/></td>
    	<td  align="center"><nested:write property="prenom"/></td>
    	<td  align="center"><nested:text property="proposition" size="32"/></td>
    	<td  align="center"><a href="${pageContext.request.contextPath}/copier.do?id=${EtudiantOP.id_op}"><html:img src="images/button.PNG"></html:img></a></td>
    	<td  align="center"><nested:text property="decision" size="32" /></td>
    </tr>
    </nested:iterate>
    Tu dois même pouvoir simplifier ton code jsp en remplaçant la balise <a> par un tag nested:link comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <nested:iterate property="listeEtudiants">
    <tr class="tuples2" >
    	<td  align="center"><nested:write property="id_op"/></td>
    	<td  align="center"><nested:write property="nom"/></td>
    	<td  align="center"><nested:write property="prenom"/></td>
    	<td  align="center"><nested:text property="proposition" size="32"/></td>
    	<td  align="center"><nested:link action="copier" paramId="id" paramProperty="id_op"><html:img src="images/button.PNG"></html:img></nested:link></td>
    	<td  align="center"><nested:text property="decision" size="32" /></td>
    </tr>
    </nested:iterate>
    Modératrice Java - Struts, Servlets/JSP, ...

  4. #4
    Membre averti Avatar de Drakiss
    Homme Profil pro
    Consultant MOE
    Inscrit en
    Octobre 2010
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Consultant MOE
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2010
    Messages : 185
    Points : 435
    Points
    435
    Par défaut
    Merci beaucoup, je n'ai pas vraiment travaillé dessus depuis, je m'y remet ce matin, et vais essayer vos réponses, je mettrai résolu dès que tout marchera.
    Merci encore, pour vos réponses, que ferais-on sans internet ?
    I
    Aussi haut que soit le trône on n'est jamais assis que sur son cul...

  5. #5
    Membre averti Avatar de Drakiss
    Homme Profil pro
    Consultant MOE
    Inscrit en
    Octobre 2010
    Messages
    185
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Consultant MOE
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2010
    Messages : 185
    Points : 435
    Points
    435
    Par défaut
    Voila, je viens de tester, et le problème est résolu, un grand grand merci aux personnes qui se sont penchées sur mon problème et qui on réussi à le résoudre, il fallait effectivement préférer <nested:iterate> dans la jsp, et valoriser 'ListeEtudiantsForm' pour afficher et récupérer proprement la liste des étudiants.

    Ci-joint le code final au cas ou...

    l'affichage dans la jsp qui ne diffère pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <html:form action="/modifierTout.do" method="POST" focus="proposition" >
    						<nested:iterate property="listeEtudiants">
    							<tr class="tuples2" >
    								<td  align="center"><nested:write property="id_op"/></td>
    								<td  align="center"><nested:write property="nom"/></td>
    								<td  align="center"><nested:write property="prenom"/></td>
    								<td  align="center"><nested:text property="proposition" size="32"/></td>
    								<td  align="center"><nested:link action="copier" paramId="id" paramProperty="id_op"><html:img src="images/button.PNG"></html:img></nested:link></td>
    								<td  align="center"><nested:text property="decision" size="32" /></td>
    							</tr>
    							</nested:iterate>
    et la valorisation dans l'action précédent l'affichage de la page :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
    ListeEtudiants listeEtudiants = new ListeEtudiants(annee, classe, ordre,orderBy );
     
    request.getSession().setAttribute("ListeEtudiantsForm", listeEtudiants);
    avec comme struts-config.xml :

    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
     
    <form-bean name="ListeEtudiantsForm" type="scolarite.bean.ListeEtudiants"/>
     
    <action
    	        	path="/modifierTout"
    	        	name="ListeEtudiantsForm"
    	        	input="/jsp/Liste.jsp"
    	        	validate="false"
    	        	scope="session"
    	        	type="action.ModifierToutAction"
    	        	parameter="valider">
    	        	<forward name="retour" path="/accueil.do"></forward>
    	        	<forward name="valider" path="/jsp/errors.jsp"></forward>
    	        	<forward name="erreur" path="/jsp/errors.jsp"></forward>
    	        	<forward name="non" path="/jsp/NonAutorise.jsp"/>
     			</action>
    En espérant que cela aide d'autres personnes à résoudre des problèmes similaires et un fabuleux merci à tous ceux qui participent à ce forum d'entraide sans qui la vie serais plus difficile.
    I
    Aussi haut que soit le trône on n'est jamais assis que sur son cul...

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

Discussions similaires

  1. Problème d'affichage du champ text enrichi
    Par mahmoud.md dans le forum InfoPath
    Réponses: 15
    Dernier message: 10/08/2011, 12h57
  2. Problème de récupération de champs dans une DW
    Par SandraG dans le forum Powerbuilder
    Réponses: 3
    Dernier message: 27/11/2007, 12h08
  3. Problème Requête SELECT sur champ texte
    Par arnaud_verlaine dans le forum WinDev
    Réponses: 5
    Dernier message: 02/10/2007, 21h19
  4. Réponses: 31
    Dernier message: 27/07/2006, 13h51
  5. [struts][iterate] problème logic:iterate avec un Vector
    Par jaimepasteevy dans le forum Struts 1
    Réponses: 9
    Dernier message: 31/03/2004, 18h05

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