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 :

Modifier des valeurs dans un tableau


Sujet :

Struts 1 Java

  1. #1
    Membre à l'essai
    Inscrit en
    Août 2008
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 19
    Points : 15
    Points
    15
    Par défaut Modifier des valeurs dans un tableau
    Bonjour,

    Je débute en struts et je n'arrive pas à modifier correctement les valeurs dans un tableau dont voilà le contenu : Matricule Nom Prénom Age Mail.
    à chaque ligne, il y a un lien supprimer et modifier (pour modifier l'age pour le moment). Lorsque je clique sur modifier, je modifie bien l'âge de la bonne ligne mais avec la valeur de l'âge de la première ligne... d'où mon problème.

    Ma 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
    41
    42
    43
    44
    45
    <html:form action="/EditerEmploye.do">
    	<html:hidden property="hidden" value="default"/>
    	<nested:hidden styleId="idemploye" property="idemploye"/>
    	<table border="1" width="70%" align="center">
    		<thead>
    			<tr>
    				<th><bean:message key="colonne.idemploye" /></th>
    				<th><bean:message key="colonne.nom" /></th>
    				<th><bean:message key="colonne.prenom" /></th>
    				<th><bean:message key="colonne.age" /></th>
    				<th><bean:message key="colonne.mail" /></th>
    				<th>&nbsp;</th>
    				<th>&nbsp;</th>
    			</tr>
    		</thead>
    		<tbody>
    			<logic:iterate id="employe" name="EMPLOYES" type="monPackage.modele.EmployeBean" indexId="index">
    				<tr>
    					<bean:define id="ID" name="employe" property="idemploye"/>
    					<td align="center"><bean:write name="employe" property="idemploye"  /></td>
    					<td align="center"><bean:write name="employe" property="nom" /></td>
    					<td align="center"><bean:write name="employe" property="prenom" /></td>
    					<td width="3"><nested:text size="3" name="employe" property="age"/></td>
    					<td width="20"><nested:text size="20" name="employe" property="mail" /></td>
    					<td align="center">
    						<a href="#" onclick="setHidden('delete'); document.getElementById('idemploye').value = ${ID}; document.forms[0].submit();">
    							<bean:message key="supprimer.libelle"/>
    						</a>
    					</td>
    					<td align="center">
    						<a href="#" onclick="setHidden('update'); document.getElementById('idemploye').value = ${ID}; document.editionForm.submit();">
    							<bean:message key="modifier.libelle"/>
    						</a>
    					</td>
    				</tr>
    			</logic:iterate>
    		</tbody>
    	</table>
    </html:form>
     
    <br/>
     
    <SCRIPT>
       function setHidden(value){document.editionForm.hidden.value=value;}
    </SCRIPT>
    ActionForward :
    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
    	public ActionForward update(ActionMapping mapping, ActionForm form,
    			HttpServletRequest request, HttpServletResponse response)
    			throws IOException, ServletException {
    		// Récupère les informations du formulaire
    		final DynaValidatorActionForm lForm = (DynaValidatorActionForm) form;
    		final Long idEmploye = new Long(lForm.getString("idemploye"));
    		final Integer unAge = new Integer(lForm.getString("age"));
     
    		// Création en base du nouvel enregistrement
    		final employeDAO lListeEmployeDAO = new employeDAO();
    		final String lErreur = lListeEmployeDAO.modifierElementsEmploye(idEmploye,unAge);
     
    		if (lErreur == null) {
    			// S'il n'y a pas d'erreurs, on retourne le forward "succes"
    			return mapping.findForward("ok");
    		} else {
    			final ActionMessages lErreurs = getErrors(request);
    			final ActionMessage lActionMessage = new ActionMessage(lErreur,
    					false);
    			lErreurs.add(Globals.ERROR_KEY, lActionMessage);
    			saveErrors(request, lErreurs);
    			// S'il y a des erreurs, on retourne le forward "erreur"
    			return mapping.findForward("erreur");
    		}
     
    	}
    Je ne renvoie donc pas le bon age au moment du submit... :-(
    Où est mon erreur et comment faire pour renvoyer l'âge de la ligne que l'on veut modifier ?
    Merci

  2. #2
    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
    Dans l'Action, une fois que tu as récupéré l'id, il faut itérer sur la collection et récupérer la valeur de l'âge correspondant à cet id.

    Pour que la mise à jour de la collection fonctionne correctement, la collection EMPLOYES doit être une propriété de l'ActionForm et il faut remplacer le tag logic:iterate par un tag nested et supprimer l'attribut name dans les tags nested:text :

    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
    <nested:form action="/EditerEmploye.do">
    	<html:hidden property="hidden" value="default"/>
    	<nested:hidden styleId="idemploye" property="idemploye"/>
    	<table border="1" width="70%" align="center">
    		<thead>
    			<tr>
    				<th><bean:message key="colonne.idemploye" /></th>
    				<th><bean:message key="colonne.nom" /></th>
    				<th><bean:message key="colonne.prenom" /></th>
    				<th><bean:message key="colonne.age" /></th>
    				<th><bean:message key="colonne.mail" /></th>
    				<th>&nbsp;</th>
    				<th>&nbsp;</th>
    			</tr>
    		</thead>
    		<tbody>
    			<nested:iterate property="EMPLOYES" id="employe">
    				<tr>
    					<td align="center"><nested:write property="idemploye"  /></td>
    					<td align="center"><nested:write property="nom" /></td>
    					<td align="center"><nested:write property="prenom" /></td>
    					<td width="3"><nested:text size="3" property="age"/></td>
    					<td width="20"><nested:text size="20" property="mail" /></td>
    					<td align="center">
    						<a href="#" onclick="setHidden('delete'); document.getElementById('idemploye').value = ${employe.idemploye}; document.forms[0].submit();">
    							<bean:message key="supprimer.libelle"/>
    						</a>
    					</td>
    					<td align="center">
    						<a href="#" onclick="setHidden('update'); document.getElementById('idemploye').value = ${employe.idemploye}; document.editionForm.submit();">
    							<bean:message key="modifier.libelle"/>
    						</a>
    					</td>
    				</tr>
    			</logic:iterate>
    		</tbody>
    	</table>
    </nested:form>
    Modératrice Java - Struts, Servlets/JSP, ...

  3. #3
    Membre à l'essai
    Inscrit en
    Août 2008
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 19
    Points : 15
    Points
    15
    Par défaut
    Merci pour ton aide. Ca avance mais ça ne fonctionne toujours pas. Dans l'action, j'ai rajouté attribute = "bean" pour que le contenu du tableau soit affiché (ce qui n'était plus le cas). Par contre, parameter = "hidden" ne semble plus pris en compte car j'ai l'erreur :

    Message*: 'document.editionForm.hidden' a la valeur Null ou n'est pas un objet.
    Voilà un extrait de mon fichier struts-config.xml :

    Code xml : 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
        	 <action 	path      = "/AfficherEdition"
        	            name      = "editionForm"
                  		type      = "monPackage.controleur.AfficherListeAction"
                   		scope     = "request"
                   		validate  = "false"
                   		attribute = "bean">
    	       			<forward name="ok" path="/pages/edition.jsp"  />
    	       			<forward name="erreur" path="/pages/erreur.jsp"  />
        	</action>
     
        	<action    	path      = "/EditerEmploye"
        	            name      = "editionForm"
                   		type      = "monPackage.controleur.EditerListeAction"
                   		scope     = "request"
                   		validate  = "false"
                   		attribute = "bean"
                   		parameter = "hidden">
    	        		<forward name="ok" path="/AfficherEdition.do"  />
    	        		<forward name="erreur" path="/pages/erreur.jsp"  />
    	    </action>

    Si tu as une idée, je suis preneur
    je rame.....

  4. #4
    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
    Je n'utilise jamais l'attribut attribute dans le mapping de mes Actions et je ne comprends pas bien pourquoi tu dois l'ajouter pour que le contenu de la liste s'affiche.

    Sinon, il me semble qu'à partir du moment où tu ajoutes attribute="bean", le form-bean est connu sous le nom "bean".
    Donc, dans la fonction Javascript setHidden, il faut sans doute remplacer editionForm par bean :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.bean.hidden.value=value;
    ou sinon, pour éviter ce genre d'erreur, si tu n'as qu'un formulaire dans ta page, tu peux mettre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.forms[0].hidden.value=value;
    Modératrice Java - Struts, Servlets/JSP, ...

  5. #5
    Membre à l'essai
    Inscrit en
    Août 2008
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 19
    Points : 15
    Points
    15
    Par défaut
    En fait tu as raison, ça fonctionne sans l'attribut attribute dans le mapping des actions.
    Je ne sais pas ce qui conçait hier...
    Merci encore !
    @+

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

Discussions similaires

  1. [MySQL] Modifier des valeurs dans un tableau lié a mysql
    Par David1259 dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 01/06/2014, 09h23
  2. [WD10] Afficher des valeurs dans un tableau
    Par dj-julio dans le forum WinDev
    Réponses: 4
    Dernier message: 19/03/2014, 11h32
  3. Réponses: 3
    Dernier message: 12/06/2006, 12h04
  4. [Tableaux]Ajouter des valeurs dans un tableau
    Par Antoine1183 dans le forum Collection et Stream
    Réponses: 13
    Dernier message: 03/04/2005, 13h41
  5. Décaler des valeurs dans un tableau
    Par sh2003 dans le forum Langage
    Réponses: 6
    Dernier message: 20/03/2004, 16h01

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