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 2 Java Discussion :

Struts2: Iterator && Bean && perte de données


Sujet :

Struts 2 Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Responsable test de charge
    Inscrit en
    Février 2006
    Messages
    186
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable test de charge

    Informations forums :
    Inscription : Février 2006
    Messages : 186
    Par défaut Struts2: Iterator && Bean && perte de données
    Bonjour,

    J'affiche une liste de beans et des ces champs dans une jsp.

    Cependant, lorsque je modifie les valeurs à l'écran et que je post, aucun appel au setter de ma liste ni de l'objet n'est fait. Je perd donc toute données.


    Mon bean
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    private String shortLabel;
     
    public String getShortLabel() {
    		return shortLabel;
    	}
    public void setShortLabel(String label) {
    		this.shortLabel = label;
    	}
    Mon action
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    private List<AdjustmentBean> adjust = new ArrayList<AdjustmentBean>();
     
    public List<AdjustmentBean> getAdjust() {
    		return adjust;}
     
    public void setAdjust(List<AdjustmentBean> adjustment) {
    		this.adjust = adjustment;}
    ma jsp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <s:iterator value="adjust" var="element" status="stat">
    	<td width="50%"> 
    		<s:label cssClass="fieldOpraTitle"   key="adjustment.shortLabel" /> 
    		<s:textfield value="%{#element.shortLabel}" name="datas[%{#stat.index}].shortLabel"  />
    	</td>
    </s:iterator>
    Comment récupérer les données postées ??

  2. #2
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juillet 2009
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Juillet 2009
    Messages : 131
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <s:iterator value="adjust" >
    	  <s:textfield  name="shortLabel"  />
    </s:iterator>
    Chez moi, ça marche comme ça.

    shortLabel est bien un attribut de ton AdjusmentBean ?

  3. #3
    Membre éclairé
    Profil pro
    Responsable test de charge
    Inscrit en
    Février 2006
    Messages
    186
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable test de charge

    Informations forums :
    Inscription : Février 2006
    Messages : 186
    Par défaut
    shortLabel est bien un attribut de mon bean.

    J'ai modifié ma classe et ma JSP. Le champ du bean est bien affecté lorsqu'il est en dehors de l'iterator.

    Cependant, si il est dans l'itération, il n'est jamais setté

    mon action à jour pour le test:

    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
     
    package com.bnpp.opra.mdm.ui.action;
     
    import java.util.ArrayList;
    import java.util.List;
     
    import com.bnpp.opra.fwk.exception.GlobalException;
    import com.bnpp.opra.mdm.ui.bean.AdjustmentBean;
    import com.bnpp.opra.mdm.ui.bean.adapter.PricingActionAdapter;
    import com.opensymphony.xwork2.Preparable;
     
     
    public class PricingAction extends OpraPricingAction {
     
    private List<AdjustmentBean> adjust = new ArrayList<AdjustmentBean>();
    private AdjustmentBean bean= new AdjustmentBean();
    private String field;
     
    public final String framesetAction() throws GlobalException {
    		return SUCCESS;}
     
    public final String showAction() throws GlobalException {
    		PricingActionAdapter.mapAdjustment(adjust);
    		bean.setShortLabel("toto");
    		field = "tralala";
    		return SUCCESS;}
     
    public final String saveAction() throws GlobalException {
    		return SUCCESS;}
     
    public final List<AdjustmentBean> getAdjust() {
    		return adjust;}
     
    public final void setAdjustd(final List<AdjustmentBean> val) {
    		this.adjust = val;}
     
    public final AdjustmentBean getBean() {
    		return bean;}
     
    public final void setBean(AdjustmentBean bean) {
    		this.bean = bean;}
    public final String getField() {
    		return field;}
    public final void setField(String field) {
    		this.field = field;}
    }
    ma jsp pour le test :
    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
     
    <%@ page language="java" contentType="text/html; charset=UTF-8"
    	pageEncoding="UTF-8"%>
    <%@ taglib prefix="s" uri="/struts-tags"%>
    <html>
    <head>
    <meta http-equiv="Expires" content="0">
    <meta http-equiv="Cache-Control" content="no-cache">
    <meta http-equiv="Pragma" content="no-cache">
    <script type="text/javascript">
    	function save() {
    		var theAction = '<s:url value="/pricing/save.action"/>';
    		document.getElementById("myForm").action = theAction;
    		var form = document.getElementById('myForm');
    		form.submit(); }
    </script>
    </head>
    <body>
    <s:form id="myForm" method="post">
    	<table>
    		<tr>
    			<td>
    			<table>
    				<tr>
    					<td width="50%">field : <s:textfield name="field" /> bean :
    					<s:textfield name="bean.shortLabel" /></td>
    				</tr>
    			</table>
    			</td>
    		</tr>
    	</table>
    	<s:iterator value="adjust" >
    		<s:textfield name="shortLabel" />
    	</s:iterator>
    	<img src="<s:url value='/resources/img/btn-save.jpg'/>" title='<s:text name="button.save.label"/>'
    		alt='<s:text name="button.save.label"/>' class="button"onclick="save()" />
    </s:form>
    </body>
    </html>

  4. #4
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juillet 2009
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Juillet 2009
    Messages : 131
    Par défaut
    Moi, je fais ça comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <s:iterator value="utilisateurs">
        <s:form action="updateUtilisateur" theme="simple">
              <s:textfield name="nom_utilisateur" />
              <s:submit />
        </s:form>
    </s:iterator>
    Donc le form dans l'iterator et non l'inverse, du coup, quand ça itère sur ma collection d'utilisateurs, j'ai bien à l'affichage les noms d'utilisateurs existants, et quand je modifie la valeur et que je submit, du côté de mon Action, je récupère un String "nom_utilisateur" avec ses getters/setters que j'affecte ensuite à mon utilisateur que j'enregistre.

    ça ne te va pas comme ça ?

  5. #5
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juillet 2009
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Juillet 2009
    Messages : 131
    Par défaut
    Ah oui, et j'ai oublié aussi de préciser qu'il fallait aussi l'identifiant que je met dans un <s:hidden /> au moment de l'itération.

    Du coup, côté action, je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    bean.setId(id_bean);
    bean.setName(nom_bean);
    beanService.update(bean);

  6. #6
    Membre éclairé
    Profil pro
    Responsable test de charge
    Inscrit en
    Février 2006
    Messages
    186
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Responsable test de charge

    Informations forums :
    Inscription : Février 2006
    Messages : 186
    Par défaut
    Je test avec la modification que tu me proposes tel que :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <s:iterator  value="list" status="stat" var="element">
    	<s:form id="myForm" theme="simple">
              <s:textfield name="description" />
              <s:submit   onclick="save()"/>
        </s:form>
    </s:iterator>
    Mais j'ai le même résultat. Les paramètres ne sont pas récupéré dans l'action.

    JE poste ma pile d'intercepteur que j'ai surchargé des fois qu'elle soit la source du 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
     
    <interceptor-ref name="exception"/>
                    <interceptor-ref name="alias"/>
                    <interceptor-ref name="servletConfig"/>
                    <interceptor-ref name="i18n"/>
                    <interceptor-ref name="prepare"/>
                    <interceptor-ref name="chain"/>
                    <interceptor-ref name="debugging"/>
                    <interceptor-ref name="scopedModelDriven"/>
                    <interceptor-ref name="modelDriven"/>
                    <interceptor-ref name="fileUpload"/>
                    <interceptor-ref name="checkbox"/>
                    <interceptor-ref name="multiselect"/>
                    <interceptor-ref name="staticParams"/>
                    <interceptor-ref name="params" /> 
                    <interceptor-ref name="actionMappingParams"/>
                    <interceptor-ref name="conversionError"/>
                    <interceptor-ref name="validation" />
                    <interceptor-ref name="workflow" />

Discussions similaires

  1. [Struts2] Iterator en cascade
    Par ALJ dans le forum Struts 2
    Réponses: 1
    Dernier message: 14/09/2011, 15h39
  2. logic:iterate sur 2 bean differents
    Par delph1983 dans le forum Struts 1
    Réponses: 1
    Dernier message: 19/06/2007, 12h05
  3. logic:Iterate - cannot find bean
    Par nathalie2266 dans le forum Struts 1
    Réponses: 3
    Dernier message: 06/01/2007, 19h52
  4. [nested:iterate] erreur de bean
    Par ange458 dans le forum Struts 1
    Réponses: 2
    Dernier message: 03/10/2006, 17h08
  5. [JTable] Perte des données
    Par david71 dans le forum Composants
    Réponses: 8
    Dernier message: 09/01/2005, 00h37

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