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 :

[logic:iterate] arreter la boucle


Sujet :

Struts 1 Java

  1. #21
    Membre confirmé
    Inscrit en
    Février 2007
    Messages
    134
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 134
    Par défaut
    info est un arraylist de type produit contenant les attributs nom, prix....
    pour remplir la liste, jele fais dans mon actionListeProduit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ListeProduitForm ListeProduit=(ListeProduitForm) form ;
    ListeProduit.setListeProduit(info);
    request.setAttribute("listeProduit", ListeProduit);
    je comprends pas la difference entre nested:root, et nested:iterate,

  2. #22
    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 corriger cette erreur :
    Cannot create iterator for this collection
    je pense qu'il faut initialiser l'ArrayList dans l'ActionForm comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    public class ListeProduitForm extends ActionForm {
    	private ArrayList<Produit> listeProduit=new ArrayList<Produit>();
    et supprime cette ligne dans ton Action :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    request.setAttribute("listeProduit", ListeProduit);

  3. #23
    Membre confirmé
    Inscrit en
    Février 2007
    Messages
    134
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 134
    Par défaut
    tjrs la meme erreur
    javax.servlet.ServletException: Cannot create iterator for this collection
    je pense pas qu'il soit un pb d'initialisation...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    ListeProduitForm ListeProduit=(ListeProduitForm) form 
     
    ListeProduit.setListeProduit(info);
    return mapping.findForward("AfficherListeProduit");
    comme listeproduit est casté comme une actionform, je crois qu'il peut plus faire des iterations...

  4. #24
    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
    listeProduit n'est pas casté comme une ActionForm.

    En fait, ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public ActionForward execute(ActionMapping mapping,ActionForm form,HttpServletRequest request,HttpServletResponse response)
    	throws Exception
    {
      ListeProduitForm ListeProduit=(ListeProduitForm) form ;
    permet de récupérer le form-bean référencé dans le mapping de l'Action via l'attribut name dans le struts-config.xml.
    Soit ici :
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <form-beans>
    	<form-bean name="ListeProduit" type="forms.ListeProduitForm"/>
    </form-beans>
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <action path="/Informatique" type="actions.ActionListeProduit"
            scope="session" name="ListeProduit" validate="false">	
    	<forward name="AfficherListeProduit" path="/pages/produit.jsp" redirect="false"/>
    	<forward name="Echec" path="/pages/erreurs.jsp" redirect="false"/>
    </action>
    Et ensuite :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ListeProduit.setListeProduit(info);
    permet d'initialiser la propriété listeProduit de l'ActionForm ListeProduitForm via la méthode setListeProduit de ListeProduitForm.

    info est toujours bien une ArrayList de beans Produit ?

    Peux-tu montrer le code de l'Action ActionListeProduit ?

  5. #25
    Membre confirmé
    Inscrit en
    Février 2007
    Messages
    134
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 134
    Par défaut
    en gors, je fais ca dans l'ActionListeProduit :
    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
     
    ArrayList<Produit> info;
    ...
    ...
    // Remplissage du bean
    produit.setNomProduit(nom) ;
    produit.setPrix(prix) ;
    produit.setDescription(description);
    produit.setCategorie(categorie);
    produit.setQuantite(0);
    // Ajout du bean dans l'ArrayList
    info.add(produit) ;
    ...
    request.setAttribute("categorie",categorie);
    ListeProduitForm ListeProduit=(ListeProduitForm) form ;
    ListeProduit.setListeProduit(info);
    return mapping.findForward("AfficherListeProduit");
    merci de ton aide..

  6. #26
    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
    Ok, ça semble correct.

    Et tu as bien mis name="ListeProduit" dans le mapping de l'Action ActionAjouterPanier ?
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <action path="/ajouterPanier" type="actions.ActionAjouterPanier"
            scope="session" name="ListeProduit" input="/pages/produit.jsp">
    	 <forward name="AjouterPanier" path="/pages/produit.jsp"/>   	
    </action>
    et le nested:iterate est bien dans un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <html:form action="ajouterPanier">

  7. #27
    Membre confirmé
    Inscrit en
    Février 2007
    Messages
    134
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 134
    Par défaut
    oui, bien sur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <action path="/ajouterPanier" type="actions.ActionAjouterPanier" scope="session" name="ListeProduit" input="/pages/produit.jsp">
        		 <forward name="AjouterPanier" path="/pages/produit.jsp" redirect="false"/>   	
      		</action>
    et le formulaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    <html:form action="/ajouterPanier.do">		
    	<table border="1">

  8. #28
    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
    Ben là, avec les éléments que tu m'as donné, je ne vois pas pourquoi tu as toujours ce message d'erreur.
    Peux-tu montrer le code complet de l'ActionForm et de la jsp ?

  9. #29
    Membre confirmé
    Inscrit en
    Février 2007
    Messages
    134
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 134
    Par défaut
    l'ActionForm
    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
     
    public class ListeProduitForm extends ActionForm{
    	private ArrayList<Produit> listeProduit=new ArrayList<Produit>();
     
    	// Méthode validate non implémentée...
    	 public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) {
    			ActionErrors errors = new ActionErrors();
    	// Renvoi des erreurs :
    			return errors;	
    	 }
     
    	 //	Constructeur par défaut de UserForm()...
    	 public ListeProduitForm(){}
     
    	 // getters et setters....
    	 public ArrayList<Produit> getListeProduit() {
    			return listeProduit;
    	 }
    	 public void setListeProduit(ArrayList<Produit> listeProduit) {
    			this.listeProduit = listeProduit;
    	 }
    }
    la 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
    38
    39
    40
     
    <%@taglib uri="/tags/struts-bean" prefix="bean"%>
    <%@taglib uri="/tags/struts-html" prefix="html"%>
    <%@taglib uri="/tags/struts-logic" prefix="logic"%>
    <%@taglib uri="/tags/struts-nested" prefix="nested"%>
     
    <html:html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    <title>Produits informatiques</title>
    </head>
    <body>
     
    		<center> 
    			<h1>LISTE DES PRODUITS</h1>
    			<br />
    				Catégorie : <bean:write name="categorie"/>
    			<br /><br />
    	<html:form action="/ajouterPanier.do">		
    	<table border="1">
             <tr>
                <td>Produit </td>
                <td>prix en Euros</td>
                <td>description</td>
                <td>Quantité</td> 
             </tr>
          <nested:iterate property="listeProduit">
             <tr>
                <td><nested:write property="nomProduit"/></td>
                <td><nested:write property="prix"/></td>
                <td><nested:write property="description"/></td>
                <td><nested:text property="quantite"/></td>
             </tr>
    	 </nested:iterate>
          <html:submit value="ajouter au panier"></html:submit>
    	 </table>
    	</html:form> 
    	 </center>
     </body>
    </html:html>

  10. #30
    Membre confirmé
    Inscrit en
    Février 2007
    Messages
    134
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 134
    Par défaut
    le probleme ne vient pas peut etre de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Catégorie : <bean:write name="categorie"/>
    dans la jsp???

  11. #31
    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
    Je suis désolée, je suis à court d'idées.
    Tout me semble correct.
    Quelle version de Struts utilises-tu ?

  12. #32
    Membre confirmé
    Inscrit en
    Février 2007
    Messages
    134
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 134
    Par défaut
    j'ai renoncé a ton idée, je fais pas de ListeProduitForm
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <logic:iterate name="listeProduit" scope="session" id="Produits">
             <tr>
                <td><bean:write name="Produits" property="nomProduit"/></td>
                <td><bean:write name="Produits" property="prix"/></td>
                <td><bean:write name="Produits" property="description"/></td>
                <td><input type="text" name="quantite_<bean:write name="Produits" property="idProduit"/>"/></td>
             </tr>
    	 </logic:iterate>
    je rajoute un attribut id_produit dans mon bean Produit, afin de recuperer la quantité pour chaque produit selectionné, je sais pas si c'est une bonne idée,
    j'implemente mnt mon ActionAjouterPanier, mais j'ai du mal a recuperer tous les elements dans cette action,

    en tout cas, merci bcp de m'avoir consacré de ton temps, c'est moi qui a

  13. #33
    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
    Je ne comprends vraiment pas pourquoi ça ne fonctionne pas avec les tags nested.

    Sinon, il existe une autre solution, toujours avec une ActionForm, mais sans les tags nested, c'est d'utiliser les tags indexés comme ceci :
    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
    public class ListeProduitForm extends ActionForm
    {
       private ArrayList listeProduit ;
     
       public ArrayList getListeProduit()
       { return this.listeProduit ; }
     
       public void setListeProduit(ArrayList listeProduit)
       { this.listeProduit=listeProduit ; }
     
       public Produit getProduit(int i)
       { return (Produit) this.listeProduit.get(i) ; }
     
       public void setProduit(int i,Produit produit)
       { this.listeProduit.set(i,produit) }
    }
    et dans la jsp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <logic:iterate name="ListeProduit" property="listeProduit" id="produit">
             <tr>
                <td><bean:write name="produit" property="nomProduit"/></td>
                <td><bean:write name="produit" property="prix"/></td>
                <td><bean:write name="produit" property="description"/></td>
                <td><html:text  name="produit" property="quantite" indexed="true"/></td>
             </tr>
    </logic:iterate>
    je ne sais pas si tu vas avoir le courage de le tester.
    Si jamais tu le testes et que tu as un souci, il serait mieux d'ouvrir une nouvelle discussion car celle-là commence à être un peu longue.
    sans oublier de mettre un tag

  14. #34
    Membre confirmé
    Inscrit en
    Février 2007
    Messages
    134
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 134
    Par défaut
    je vais continuer qd meme avec ma méthode, et j'hesiterai a refaire ce projet avec ta méthode, en tout elle parait plus facile,
    si ca te gene pas je t'enverrai le projet sur ta boite email,
    merci en tout cas de ton aide...

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Réponses: 0
    Dernier message: 10/02/2010, 20h55
  2. [Struts][logic:iterate] Probleme avec String
    Par julienOriano dans le forum Struts 1
    Réponses: 7
    Dernier message: 15/06/2004, 10h39
  3. [EJB2.1 Entity] [BMP] [Struts] Problème avec <logic:iterate>
    Par romain3395 dans le forum Java EE
    Réponses: 2
    Dernier message: 07/06/2004, 11h12
  4. [struts][iterate] problème logic:iterate avec un Vector
    Par jaimepasteevy dans le forum Struts 1
    Réponses: 9
    Dernier message: 31/03/2004, 19h05
  5. [Struts] logic:iterate avec un Vector
    Par laurentb dans le forum Struts 1
    Réponses: 18
    Dernier message: 03/03/2004, 15h42

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