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 :

getInputForward et perte d'infos


Sujet :

Struts 1 Java

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    85
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juillet 2003
    Messages : 85
    Points : 73
    Points
    73
    Par défaut getInputForward et perte d'infos
    Bonjour à tous.

    Bon alors voila, je ne suis pas depuis longtemps dans l'utilisation de Struts, j'ai pas non plus pour habitude de poster au moindre problème, mais là je ne trouve pas de réponse à mon problème.

    Alors je vais essayer de synthétiser comme il se doit.

    J'ai une page JSP avec deux listes et un bouton. Quand je clique sur le bouton je vais dans ma classe d'Action (Dispatch action vous comprendrez pourquoi ensuite)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public final ActionForward raffraichir(final ActionMapping mapping, final ActionForm form, final HttpServletRequest request,
     final HttpServletResponse arg3) throws Exception {
    		ConfigEntraideActionForm monForm = (ConfigEntraideActionForm) form;
    		IEntraideManager entraideManager = new EntraideManager();
    		Collection listeSiteFlux = entraideManager.getListeInfoEntraide(monForm.getEdg(), monForm.getIdFlux());
    		monForm.setListeSiteFlux(listeSiteFlux);
    		return mapping.getInputForward();
    	}
    Dans ce bout de code je récupère les infos selectionnées dans ces deux liste en je renvois le tout sur la même page.

    Cette même page :

    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
    <html:form action="/configEntraide">
    	<table class="tableGeneric" cellspacing="3" align="center">
    		<html:hidden property="hidden" value="default" />
    		<tr>
    			<td>Entité de Gestion</td>
    			<td><html:select property="edg">
    				<html:optionsCollection property="listeEdg" value="edg" label="libelleComplet" />
    			</html:select></td>
    		</tr>
    		<tr>
    			<td>Flux</td>
    			<td><html:select property="idFlux">
    				<html:optionsCollection property="listeFlux" value="idFlux" label="libelleComplet" />
    			</html:select></td>
    		</tr>
    		<tr>
    			<td colspan="2" align="center"><html:submit onclick="javascript:setHidden('raffraichir');">Afficher</html:submit>
    		</tr>
    	</table>
    	<logic:notEmpty name="ConfigEntraideActionForm"  property="listeSiteFlux" >
    	<table>
    	<logic:iterate name="ConfigEntraideActionForm" property="listeSiteFlux" id="SiteFlux" indexId="itt">
    				<tr>
    					<td><html:text name="SiteFlux" property="idSite" /></td>
    					<td><html:text name="SiteFlux" property="idFlux" /></td>
    					<td><html:text name="SiteFlux" property="flagMutu" /></td>
    					<td><html:text name="SiteFlux" property="poidsAgent" /></td>
    					<td><html:text name="SiteFlux" property="flagEntraidant" /></td>
    					<td><html:text name="SiteFlux" property="seuil" /></td>
    				</tr>
    	</logic:iterate>
    	</table>
    	</logic:notEmpty>
    	<html:submit onclick="javascript:setHidden('enregistrer');">Enregistrer</html:submit>
    </html:form>
    Donc suite au rafraichissment de la page je récupère cette liste d'objet info.

    Je modifie un champs et je valide :

    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 final ActionForward enregistrer(final ActionMapping mapping, final ActionForm form, 
    final HttpServletRequest request, final HttpServletResponse arg3) throws Exception {
    		try {
    			ConfigEntraideActionForm monForm = (ConfigEntraideActionForm) form;
    			IEntraideManager entraideManager = new EntraideManager();
    			SiteFlux infos = null;
    			Iterator listeSiteFlux = monForm.getListeSiteFlux().iterator();
    			while (listeSiteFlux.hasNext()) {
    				infos = (SiteFlux) listeSiteFlux.next();
    				entraideManager.setInfosEntraide(infos);
    			}
    		} catch (Exception e) {
    			logger.error(e);
    		}
    		return mapping.getInputForward();
    	}
    Mais voila le hic : listeSiteFlux est null.

    Là je comprend pas. Pourtant au rafraichissement la liste est bien affichée

  2. #2
    Membre actif Avatar de Tanebisse
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2007
    Messages
    449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2007
    Messages : 449
    Points : 260
    Points
    260
    Par défaut
    Petite précision c'est ton "getListeSiteFlux()" de type Collection ou ton listeSiteFlux de type iterator qui est nul ? Tu peux montrer ton form ?

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    85
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juillet 2003
    Messages : 85
    Points : 73
    Points
    73
    Par défaut
    C'est l'objet qui est nul


    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
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
     
           /**
             * Serial ID
             */
    	private static final long serialVersionUID = -5020361152552222561L;
     
    	private Collection listeEdg;
     
    	private Collection listeFlux;
     
    	private Collection listeSiteFlux;
     
    	private EdgFlux edgFlux;
     
    	private String edg;
     
    	private String idFlux;
     
    	public EdgFlux getEdgFlux() {
    		return edgFlux;
    	}
     
    	public void setEdgFlux(EdgFlux edgFlux) {
    		this.edgFlux = edgFlux;
    	}
     
    	public Collection getListeEdg() {
    		return listeEdg;
    	}
     
    	public void setListeEdg(Collection listeEdg) {
    		this.listeEdg = listeEdg;
    	}
     
    	public Collection getListeFlux() {
    		return listeFlux;
    	}
     
    	public void setListeFlux(Collection listeFlux) {
    		this.listeFlux = listeFlux;
    	}
     
    	public Collection getListeSiteFlux() {
    		return listeSiteFlux;
    	}
     
    	public void setListeSiteFlux(Collection listeSiteFlux) {
    		this.listeSiteFlux = listeSiteFlux;
    	}
     
    	public final ActionErrors validate(final ActionMapping mapping, final HttpServletRequest request) {
    		return null;
    	}
     
    	/**
             * Appalé à l'initialisation de la page
             */
    	public void reset(ActionMapping mapping, HttpServletRequest request) {
    		IEdgManager edgManager = new EdgManager();
    		IFluxManager fluxManager = new FluxManager();
    		this.listeEdg = edgManager.getEdg();
    		this.listeFlux = fluxManager.getFullFlux();
    	}
     
    	public String getEdg() {
    		return edg;
    	}
     
    	public void setEdg(String edg) {
    		this.edg = edg;
    	}
     
    	public String getIdFlux() {
    		return idFlux;
    	}
     
    	public void setIdFlux(String idFlux) {
    		this.idFlux = idFlux;
    	}
     
    	public ActionErrors validate(ActionMapping arg0, ServletRequest arg1) {
    		// TODO Auto-generated method stub
    		return super.validate(arg0, arg1);
    	}

    Par contre j'ai une piste.

    En supprimant scope="request" du stuts-config j'ai plus le même soucis. La liste n'est plus vide mais elle n'a pas pris en compte mes modifications...

    Je le mets toujours cet attribut, sans jamais vraiment savoir ce que c'est exactement. Je vais me documenter sur les sujet.

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    85
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juillet 2003
    Messages : 85
    Points : 73
    Points
    73
    Par défaut
    Fausse piste je crois...

    Je donne quand même la ligne du config :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <action path="/configEntraide" name="ConfigEntraideActionForm" type="ft.webroutage.control.entraide.ConfigEntraideAction" 
    scope="request" validate="true" input="/jsp/options/configEntraide.jsp"  unknown="false" parameter="hidden">

  5. #5
    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
    Il faut mettre le scope à session et pour que les mises à jour soient prises en compte, utilise plutôt les tags nested 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="listeSiteFlux">
    <tr>
       <td><nested:text property="idSite" /></td>
       <td><nested:text property="idFlux" /></td>
       <td><nested:text property="flagMutu" /></td>
       <td><nested:text property="poidsAgent" /></td>
       <td><nested:text property="flagEntraidant" /></td>
       <td><nested:text property="seuil" /></td>
    </tr>
    </nested:iterate>

  6. #6
    Membre actif Avatar de Tanebisse
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2007
    Messages
    449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2007
    Messages : 449
    Points : 260
    Points
    260
    Par défaut
    Salut C_nvy, peux-tu préciser l'intérêt et les différences entre les tags :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <html:text> et <nested:text>

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    85
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juillet 2003
    Messages : 85
    Points : 73
    Points
    73
    Par défaut
    Bon ça marche nickel !

    bon par contre je tag résolu mais la question de Tanebisse (enfin surtout la réponse associée) m'intéresse.

    PS : Quel malpoli ! J'en oublie de dire merci..

    Merci !

  8. #8
    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
    En fait, dans le cas de -=Spoon=-, pour que cela fonctionne avec le tag logic:iterate et les tags html:text, il aurait fallu coder getter et setter indexé sur l'objet SiteFlux dans l'ActionForm et ajouter l'attribut indexed="true" dans les tags html:text. ( voir l'exemple donné dans cette discussion).

    L'avantage avec les tags nested, c'est qu'il n'y a pas besoin de coder getter et setter indexé dans l'ActionForm car ceci est automatiquement géré.
    C'est pourquoi je lui ai proposé d'utiliser ces tags.

    Il est donc conseillé d'utiliser les tags nested lorsque l'on souhaite pouvoir modifier les propriétés d'objets contenus dans une liste et également, lorsque l'on souhaite afficher ou modifier des objets contenus dans d'autres objets.

    Pour plus de précisions, voir l'exemple que j'avais donné dans cette discussion.
    Et sinon, voir sur le site de Struts par exemple ici.

  9. #9
    Membre actif Avatar de Tanebisse
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2007
    Messages
    449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2007
    Messages : 449
    Points : 260
    Points
    260
    Par défaut
    Merci pour ces précisions.

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

Discussions similaires

  1. Perte d'info au démarrage
    Par frakosun dans le forum Windows XP
    Réponses: 2
    Dernier message: 27/12/2009, 21h57
  2. Perte d'info sur un disque de stockage
    Par cdsoft dans le forum Administration système
    Réponses: 3
    Dernier message: 28/01/2009, 23h03
  3. compilation tex => dvi => pdf : Perte d'infos
    Par Nicomart dans le forum Mise en forme
    Réponses: 3
    Dernier message: 12/03/2008, 19h22
  4. Perte d'info avec ADO.
    Par auroreM dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 06/04/2007, 09h49
  5. Pertes d'infos sur un objet
    Par dst dans le forum Langage
    Réponses: 1
    Dernier message: 05/08/2006, 15h03

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