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

JSF Java Discussion :

Supprimer une entrée de h:selectOneListbox


Sujet :

JSF Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    110
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 110
    Par défaut Supprimer une entrée de h:selectOneListbox
    Bonjour à tous,

    Je veut supprimer une entrée de ma h:selectOneListbox.

    Voila mon code

    JSF :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      <h:selectManyListbox value="#{referenceMB.SelectedTechnologie}"  >
               <f:selectItems value="#{referenceMB.listeTechnologies}" />
        </h:selectManyListbox>
    Managed Bean :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private int SelectedTechnologie;
    a partir de l'identifiant je récupère la Technologie et puis je l'ajoute dans une autre liste en utilisant la méthode add ( SelectItem s )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     tech=t.doFindTechnologie(selected);
     
      final SelectItem ld= new SelectItem(tech.getNotechnologie(),tech.getDescription(),note) ;
     
      this.listeReferenceTechnologies.add(ld);

    Mon probleme réside dans la suppression du SelectItem de la liste ...
    J'utilise la méthode remove(object o) qui prend en paramètre un objet pas un SelectItem comme pour l'ajout... et ca marche pas pour moi..
    Est ce qu'il ya une méthode de convertir un SelectItem en un objet...j'ai meme essayer de récupérer l'index du SelectItem et j'ai tombé sur le meme probleme.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     for (SelectItem i: listeTechnologies) {
    			if(i.getValue()==ld.getValue())
    			{
    		
    		listeTechnologies.remove(i);  // voila la ligne de l'erreur
    		    					
    			}
    Merci de m'aider.

  2. #2
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Par défaut
    tu dois redéfinir la méthode equals et hashcode du selectItem,

    tu peux le faire dans le constructeur.

  3. #3
    Membre confirmé
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    110
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 110
    Par défaut
    Citation Envoyé par Sniper37 Voir le message
    tu dois redéfinir la méthode equals et hashcode du selectItem,

    tu peux le faire dans le constructeur.
    Dans quel constructeur? de mon managed Bean?
    Est ce que tu peut m'expliquer plus avec un bout de code? que je doit mettre dans ces deux méthode?

  4. #4
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Par défaut
    tu peux faire un truc dans le genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    MonBean value = ..;
    		String libelle ..;
    		SelectItem s = new SelectItem(value,libelle) {@Override
    		public boolean equals(Object obj) {
    			// 
    			return  obj.getId() == value.getId();
     
    		}
    	};
    Sinon tu peux étendre la classe SelectItem et redéfinir la méthode equals.
    ou faire le remove à la main..une fonction qui enleve l'objet de la liste..

  5. #5
    Membre confirmé
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    110
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 110
    Par défaut
    Citation Envoyé par Sniper37 Voir le message
    tu peux faire un truc dans le genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    MonBean value = ..;
    		String libelle ..;
    		SelectItem s = new SelectItem(value,libelle) {@Override
    		public boolean equals(Object obj) {
    			// 
    			return  obj.getId() == value.getId();
     
    		}
    	};
    Sinon tu peux étendre la classe SelectItem et redéfinir la méthode equals.
    ou faire le remove à la main..une fonction qui enleve l'objet de la liste..
    OK j'ai comprit le principe... je vait essayer avec ca...Merci .

  6. #6
    Membre confirmé
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    110
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 110
    Par défaut
    Bonjour,

    J'ai essayé de redéfinir la classe SelectItem et implémenter les méthode equals() et hashcode() mais j'avais la même erreur.

    Par contre j'ai trouvé une autre piste... Je récupère maintenant l'index de l'élément sélectionné en faisant un Cast pour convertir de int à Object.
    Ca marche bien pour moi , il récupère l'index..et supprime le SelectItem de la liste sauf que parfois il génère une exception :

    voila mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     for (SelectItem i: listeTechnologies) {
    			if(i.getValue()==ld.getValue())
    			{
    			int index=	listeTechnologies.indexOf((Object)i);
    			System.out.println("index est :"+index);
    	     	listeTechnologies.remove(index);
     
    			}
    		}
    et voila l'exception :

    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
     java.util.ConcurrentModificationException
    javax.faces.el.EvaluationException: java.util.ConcurrentModificationException
    	at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:102)
    	at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
    	at javax.faces.component.UICommand.broadcast(UICommand.java:387)
    	at org.ajax4jsf.component.AjaxViewRoot.processEvents(AjaxViewRoot.java:321)
    	at org.ajax4jsf.component.AjaxViewRoot.broadcastEvents(AjaxViewRoot.java:296)
    	at org.ajax4jsf.component.AjaxViewRoot.processPhase(AjaxViewRoot.java:253)
    	at org.ajax4jsf.component.AjaxViewRoot.processApplication(AjaxViewRoot.java:466)
    	at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:82)
    	at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100)
    	at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
    	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:265)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    	at org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:178)
    	at org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:290)
    	at org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:390)
    	at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:517)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    	at org.apache.myfaces.webapp.filter.ExtensionsFilter.doFilter(ExtensionsFilter.java:301)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    	at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
    	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
    	at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:182)
    	at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:84)

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

Discussions similaires

  1. Supprimer une entrée d'une table sans casser les relations
    Par gvdmoort dans le forum Ruby on Rails
    Réponses: 4
    Dernier message: 05/10/2007, 13h02
  2. Réponses: 6
    Dernier message: 17/07/2007, 16h32
  3. [REG] Supprimer une entrée
    Par amirym dans le forum Scripts/Batch
    Réponses: 1
    Dernier message: 04/06/2007, 21h44
  4. Supprimer une entrée dans ajout suppression des programmes
    Par lavazavio dans le forum Windows XP
    Réponses: 5
    Dernier message: 01/05/2007, 18h30
  5. [Tableaux] Comment ajouter/supprimer une entrée d'un array
    Par dessinateurttuyen dans le forum Langage
    Réponses: 7
    Dernier message: 09/08/2006, 16h05

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