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> et formulaire


Sujet :

Struts 1 Java

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 28
    Par défaut <logic:iterate> et formulaire
    Bonjour,
    Cette question a déjà été abordée mais malgré mes recherches sur le forum ou sur le web, je n'arrive pas à me sortir du problème. Il me manque un élément je pense.
    Voilà: je voudrais afficher un formulaire de 13 lignes identiques contenant chacune un certain nombre de champs saisie, et je voudrais bien sûr l'exploiter ensuite.
    Avec ce que j'ai fait, la page jsp ne s'affiche pas. Elle "bute" sur le logic:iterate (si je supprime le logic:iterate, elle ne s'affiche pas).

    jsp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <html:form action="/valideDecompte">
    	<logic:iterate id="listeLignes" property="lignes" length="13">
    		<html:text name="listeLignes" property="motif" indexed="true"></html:text>
    		<html:text name="listeLignes" property="acte" indexed="true"></html:text>
    	</logic:iterate>
    </html:form>
    ActionForm
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public class DecompteForm extends ActionForm {
     
    	private List<LigneDecompte> lignes;
     
    	public List<LigneDecompte> getLignes() {
    		return lignes;
    	}
    	public void setLignes(List<LigneDecompte> lignes) {
    		this.lignes = lignes;
    	}
    }
    Le bean LigneDecompte contient les deux champs motif et acte.

    struts-config (extrait)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <form-bean name="decompteForm"
    	type="fr.irpauto.ipsa.saisiedecomptes.web.form.DecompteForm" />
    ...
    <action path="/valideDecompte" name="decompteForm"
    	type="fr.irpauto.ipsa.saisiedecomptes.web.action.DecompteAction">
    </action>
    Qu'est-ce qu'il me manque?
    Merci pour votre aide.

  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
    Quand tu utilises l'attribut index="true", il faut ajouter getter et setter indexés sur ton objet LigneDecompte dans DecompteForm :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    	public LigneDecompte getLigneDecompte(int i)
    	{
    	    return (LigneDecompte) this.lignes.get(i);
    	}
     	public void setLigneDecompte(int i,LigneDecompte ligneDecompte)
    	{
    	    this.lignes.set(i,ligneDecompte) ;
    	}
    EDIT : et j'oubliais, la jsp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <logic:iterate name="decompteForm" property="lignes" id="ligneDecompte">
    	<html:text name="ligneDecompte" property="motif" indexed="true"/>
    	<html:text name="ligneDecompte" property="acte" indexed="true"/>
    </logic:iterate>

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 28
    Par défaut
    Merci bien, mais désolé cela ne marche pas.
    Questions (jsp):
    - j'ai utilisé length="13" pour afficher 13 lignes, est-ce correct? (toi tu ne l'as pas mis).
    - name="decompteForm" est-il nécessaire vu que je suis dans un <html:form> qui est lié à DecompteForm?

  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
    Je n'ai jamais utilisé l'attribut length donc je ne sais pas si c'est correct. Il faudrait vérifier sur le site de Struts.

    Le name n'est effectivement pas obligatoire pour la majorité des tags Struts à partir du moment où ils sont inclus dans un tag html:form mais il me semble qu'il faille le coder dans le cas du logic:iterate. A vérifier et puis, ça doit dépendre aussi de la version de Struts que l'on utilise.

    Sinon, peux-tu préciser ce qui ne fonctionne pas ?
    As-tu un message d'erreur ? si oui, lequel ?

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 28
    Par défaut
    OK.
    Oui la difficulté c'est que je n'ai pas de message d'erreur. La page jsp s'affiche en partie: quand j'affiche le code source de la page, la partie correspondant au formulaire n'est pas présente. C'est comme si il n'arrivait pas à interpréter les tags logic:iterate, je ne sais pas... Quand je supprime purement et simplement ces lignes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <logic:iterate name="decompteForm" property="lignes" id="ligneDecompte">
    	<html:text name="ligneDecompte" property="motif" indexed="true"/>
    	<html:text name="ligneDecompte" property="acte" indexed="true"/>
    </logic:iterate>
    le formulaire est bien présent dans le code source de la page, mais il est vide bien sûr.
    J'espère que je suis clair.

  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
    Peux-tu montrer le code complet de la jsp ?

  7. #7
    Membre averti
    Inscrit en
    Juillet 2006
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 60
    Par défaut
    salut ta mis la tag de logic iterate dans ta page jsp ??
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic"%>
    a toi de mettre le lien selon ce ke ta fé
    vasy essaye je pense c ca!!!!
    bonne chance

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 28
    Par défaut
    salut ta mis la tag de logic iterate dans ta page jsp ??
    Oui, malheureusement je ne pense que ça soit ça.
    Bon je vous mets tout le code de la jsp. C'est un peu long, il y a des tests en plus...
    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
    65
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html"%>
    <%@ taglib uri="/WEB-INF/c.tld" prefix="core"%>
    <%@ taglib uri="/WEB-INF/fmt.tld" prefix="format"%>
    <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic"%>
    <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean"%>
     
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    <title></title>
    <link href="<html:rewrite page='/css/general.css'/>" rel="stylesheet" type="text/css" media="all" />
    <link href="<html:rewrite page='/css/menus.css'/>" rel="stylesheet"	type="text/css" media="all" />
    </head>
     
    <body>
     
    <jsp:include flush="true" page="includes/include_top.jsp"></jsp:include>
    <jsp:include flush="true" page="includes/include_left.jsp"></jsp:include>
    <div id="maincontent">
    <div class="innertube">
    	<html:form action="/trouveIndividu">
    		<div id="paragraphe">Individu</div>
    		<table class="tableau">
    			<tbody>
    				<tr>
    					<td><label for="numeroSS">Numéro SS</label></td>
    					<td><html:text property="numeroSS" styleId="numeroSS"
    						onchange="document.saisieForm.submit();" /></td>
    				</tr>
    			</tbody>
    		</table>
    	</html:form>
    	<core:choose>
    		<core:when test="${nvIndividu != true}">
    			<core:choose>
    				<core:when test="${nbSolutions == 0}">
    					<div id="info">Personne inconnue dans la base</div>
    				</core:when>
    				<core:otherwise>
    					<table class="liste">
    						<tbody>
    							<tr>
    								<td nowrap="nowrap">Nom:<b>${individu.nmidv}</b></td>
    								<td nowrap="nowrap">Prénom:<b>${individu.nmpreidv}</b></td>
    								<td nowrap="nowrap">N° SS:<b>${individu.nossidv} ${individu.nocless}</b></td>
    								<td nowrap="nowrap">Date de naissance:<b><format:formatDate value="${individu.dtnaiidv}" pattern="dd/MM/yyyy" /></b></td>
    							</tr>
    						</tbody>
    					</table>
    					<div id="paragraphe">Décompte</div>
    					<html:form action="/valideDecompte">
    						<logic:iterate name="decompteForm" property="lignes" id="ligneDecompte">
    							<html:text name="ligneDecompte" property="motif" indexed="true"/>
    							<html:text name="ligneDecompte" property="acte" indexed="true"/>
    						</logic:iterate>
    					</html:form>
    				</core:otherwise>
    			</core:choose>
    		</core:when>
    	</core:choose>
    </div>
    </div>
    </body>
    </html>

  9. #9
    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
    Ton code semble correct à première vue.

    Tu es certain que tu n'as pas de message d'erreur dans la console ou la log du serveur ?

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 28
    Par défaut
    Non pas de message d'erreur jusqu'ici mais... j'ai réussi à en provoquer une en enlevant mes deux lignes jsp:include. Cette fois j'obtiens un "No collection found":
    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
    org.apache.jasper.JasperException: Exception in JSP: /jsp/saisie.jsp:51
     
    48: 					</table>
    49: 					<div id="paragraphe">Décompte</div>
    50: 					<html:form action="/valideDecompte">
    51: 						<logic:iterate name="decompteForm" property="lignes" id="ligneDecompte">
    52: 							<html:text name="ligneDecompte" property="motif" indexed="true"/>
    53: 							<html:text name="ligneDecompte" property="acte" indexed="true"/>
    54: 						</logic:iterate>
     
     
    Stacktrace:
    	org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:504)
    	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:375)
    	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
    	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    	org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:1063)
    	org.apache.struts.action.RequestProcessor.processForwardConfig(RequestProcessor.java:386)
    	org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:229)
    	org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)
    	org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
     
     
    cause mère 
     
    javax.servlet.ServletException: No collection found
    	org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:858)
    	org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:791)
    	org.apache.jsp.jsp.saisie_jsp._jspService(org.apache.jsp.jsp.saisie_jsp:300)
    	org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:332)
    	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
    	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    	org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:1063)
    	org.apache.struts.action.RequestProcessor.processForwardConfig(RequestProcessor.java:386)
    	org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:229)
    	org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)
    	org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

  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
    Ah, on progresse.

    Comment as-tu mis la collection lignes dans le scope ?
    via un setAttribute ou via la méthode setLignes de l'ActionForm ?

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 28
    Par défaut
    Comment as-tu mis la collection lignes dans le scope ?
    via un setAttribute ou via la méthode setLignes de l'ActionForm ?
    Oui je crois bien que c'est là que ça pêche... parce que en fait je n'ai rien fait .
    J'aurais besoin d'explications là dessus. Qu'est-ce que ça veut dire "mettre la collection dans le scope" et pourquoi est-ce nécessaire?

  13. #13
    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
    Le scope, c'est le contexte de stockage d'un bean qui peut être page, request, session ou application.

    Pour que la collection soit accessible dans la jsp, il faut la mettre dans le scope.
    Tu as donc deux possibilités : soit faire un session.setAttribute, soit utiliser le setter de l'ActionForm ce qui implique de déclarer la collection dans l'ActionForm.

    Etant donné que tu as besoin de la collection en modification, il serait bien d'initialiser la collection via l'ActionForm dans l'Action qui s'exécute avant l'affichage du formulaire comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    TonActionForm tonActionForm=(TonActionForm) form ;
    tonActionForm.setLignes(lignes) ;
    et mettre le scope session sur le form-bean.

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 28
    Par défaut
    OK pour le scope.
    Par contre pour le reste, je suis désolé mais j'ai un peu de mal... Je ne vois pas où mettre les deux lignes dont tu parles.
    l'Action qui s'exécute avant l'affichage du formulaire
    ce serait pour moi "SaisieAction", dans cette Action, mais j'ai déjà la ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SaisieForm saisieForm = (SaisieForm)form;
    (SaisieForm est le formulaire qui déclenche on va dire l'affichage du formulaire DecompteForm), donc je ne peux pas mettre aussi la ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DecompteForm decompteForm = (DecompteForm)form;
    Désolé c'est un peu confus.

  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
    Effectivement, avec deux formulaires différents, ça ne va pas être possible.
    Il y a une raison particulière au fait que tu aies deux formulaires dans la même page ? Tu ne pourrais pas avoir un seul formulaire ?

  16. #16
    Membre averti
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 28
    Par défaut
    OK!
    En fait j'avais besoin d'un formulaire en 2 parties, la première partie toujours présente et la deuxième partie s'affichant ou non en fonction du résultat de la première partie.
    Voilà pourquoi j'ai fait deux formulaires, avec deux Form et deux Action, c'était plus clair dans ma tête. Mais je pense que je peux en faire un seul. J'essaie ça et je vois le résultat.

  17. #17
    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
    Tu peux conditionner l'affichage de la deuxième partie si un objet est présent, non null ou non vide via un tag logic:present ou logic:empty.

  18. #18
    Membre averti
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 28
    Par défaut
    Fantastique, ça fonctionne! Un grand merci.
    J'obtiens enfin mon itération de lignes.
    La deuxième partie du formulaire s'affiche comme je veux avec les tags core:choose mais je vais voir les logic:present et logic:empty que je ne connais pas encore.

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

Discussions similaires

  1. logic:iterate multiple dans formulaire
    Par Saris dans le forum Struts 1
    Réponses: 6
    Dernier message: 23/05/2008, 13h18
  2. [logic:iterate] deux formulaires dans un jsp.
    Par Ekinoks dans le forum Struts 1
    Réponses: 17
    Dernier message: 19/06/2007, 10h05
  3. struts formulaire dans logic:iterate
    Par jeb001 dans le forum Struts 1
    Réponses: 1
    Dernier message: 07/08/2006, 15h50
  4. [ STRUTS ] [ LOGIC:ITERATE ] tableau dans un formulaire
    Par LoulouFifi dans le forum Struts 1
    Réponses: 3
    Dernier message: 18/06/2004, 16h19
  5. [Struts] logic:iterate avec un Vector
    Par laurentb dans le forum Struts 1
    Réponses: 18
    Dernier message: 03/03/2004, 14h42

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