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 :

JSF selectOneMenu changer la valeur de mon selectItems


Sujet :

JSF Java

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 42
    Par défaut JSF selectOneMenu changer la valeur de mon selectItems
    Bonjour,

    Je reviens un peu sur le selectOneMenu et sur les selectItems.

    Mon appli permet de gérer des achats de livres et lorsque je sélectionne une catégorie, j'obtiens bien comme affichage les livres d'un même auteur.

    Par contre sur chaque ligne, je veux mettre une liste déroulante pouvant permettre de sélectionner plusieurs exemplaires d'un même livre. Dans ma base de données, j'ai dans ma table "livre" une colonne quantité et je veux dans ma liste déroulante avoir le choix d'une quantité de 0 jusqu'à la quantité que j'ai dans ma base.

    Voici le selectOneMenu de ma jsp

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <h:selectOneMenu value="#{livreController.selectItem}" >
    			<f:selectItems value="#{livreController.selectItems}"/>
    			</h:selectOneMenu>
    Pour mon controller,

    Dans mon selectItems j'ai une liste de String.


    Si quelqu'un à la moindre idée.

    J'ai essayé de mettre un valueChangeListener mais ca n'a rien donné.

    Peut-on mettre un converter?

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2010
    Messages : 65
    Par défaut
    En initialisant (dans ton contrôleur) ta liste dans une boucle avec des entiers de 1 à quantité tu auras une liste contenant ce que tu demandes.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 42
    Par défaut
    Oui mais j'ai un problème pour créer ma liste d'items.

    Car ma liste ne garde en mémoire que la liste de mon dernier livre.

    voici ma méthode getSelectItems de mon controller:

    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
     
    public List<String> getSelectItems(){
     
    		List<String> selectedItems = new ArrayList<String>();
    		//dataItemEcrivain récupère l'écrivain séléctionné dans ma liste
    			if(dataItemEcrivain!=null){
    //				récupération des livres de ma base
    				for (int j=0;j<livreService.getListLivres().size();j++){
    					Livre liv= new Livre();
    					liv=(Livre)livreService.getListLivres().get(j);
    //					si le livre de ma base est du meme auteur que
    //					mon livre selectionne alors je créé ma liste 
    //					qui contiendra mes quantités
    					if(dataItemEcrivain.getNomEcrivain().equals(liv.getNomEcrivain())){
    						List<String> selectItems = new ArrayList<String>();
    						for (int i=0;i<=liv.getQuantiteLivre();i++){
    							selectItems.add(String.valueOf(i));
    						}
    						selectedItems=selectItems;	
    					}	
    				}
     
     
    			}

    Je ne vois pas où est l'erreur...

  4. #4
    Membre confirmé Avatar de koack
    Homme Profil pro
    Inscrit en
    Décembre 2010
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 60
    Par défaut
    hello,

    Chaque fois que tu trouves un livre qui correspond a l'auteur tu ecrasses ton resultat , commence a 1 aussi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for (int i=1;i<=liv.getQuantiteLivre();i++){
    selectItems.add(String.valueOf(i));
    }
    selectedItems=selectItems;

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 42
    Par défaut
    Oui c'est vrai que j'écrase mon ancienne liste, mais je ne vois pas vraiment comment faire.

    J'ai essayé de redéfinir ma méthode getSelectItems, voici le code:

    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
     
    	public List<String> getSelectItems(){
     
    		//si je place ici
    //		selectItems = new ArrayList<String>();
    		//j'obtiens dans ma liste déroulante toutes mes listes créées
     
    		if(listeLivres!=null){
     
    			//récupère la liste de mes livres à afficher
    			for (Livre li:listeLivres){
    				//initialisation de ma liste de quantités
    				//mais quand je place l'initialisation de ma liste ici
    				//j'obtiens forcément la dernière liste
    				selectItems = new ArrayList<String>();
    				for (int i=0;i<=li.getQuantiteLivre();i++){
    					selectItems.add(String.valueOf(i));
    				}
    			}
    		}
    		return selectItems;
    	}
    J'ai aussi essayé de créer une List<List<String>> pour y injecter toutes mes lignes mais ca n'a pas fonctionné.

    En fait j'aimerai bien savoir comment je lie mes selectItems à mes livres que j'affiche.

  6. #6
    Membre confirmé Avatar de koack
    Homme Profil pro
    Inscrit en
    Décembre 2010
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 60
    Par défaut
    Mon appli permet de gérer des achats de livres et lorsque je sélectionne une catégorie, j'obtiens bien comme affichage les livres d'un même auteur.
    l'affichage se fait dans une datatable ?

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 42
    Par défaut
    oui ma liste de livres passe par une dataTable

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2010
    Messages : 65
    Par défaut
    Quand tu sélectionne un auteur tu peux faire une action sur ton managed bean pour que ta liste se mette à jour :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <h:selectOneListbox id="liste" ...>
    <a4j:support event="onselect" reRender="table" actionListener="#tonBean.rechargerLivres}" />
      <f:selectItems ... />
    </h:selectOneListbox>
    
    <h:dataTable id="table">...</h:dataTable>


    Parallèlement tu peux recharger ton composant dataTable avec la propriété reRender de la balise <a4j> qui est fournie avec richfaces (il y en a beaucoup d'autre cf. le sondage de ce forum) . Si tu as JSF 2.0 il y a aussi les librairies <f:ajax>

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 42
    Par défaut
    et quand on n'utilise pas ajax et qu'on est en jsf 1.2, y a pas d'autres moyens?

  10. #10
    Membre confirmé Avatar de koack
    Homme Profil pro
    Inscrit en
    Décembre 2010
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 60
    Par défaut
    Voila un peu de code (un peu moche d'ailleur) mais qui je l'espere vous aidera :

    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
     
    @ManagedBean(name="ListLivres")
    @RequestScoped
     
    public class ListLivres {
    	private List<Livre> livres = new ArrayList<Livre>();
     
    	public ListLivres() {
    		/* Je crée ici une liste de 2 livres */
    		/* A Remplacer */
     
    		Livre livre1 = new Livre();
    		Livre livre2 = new Livre();
     
     
    	livre1.setTitre("Titre1");
    		livre2.setTitre("Titre2");
    		livre1.setQuantite(40);
    		livre2.setQuantite(65);
    		livre1.setDetails("Details1");
    		livre2.setDetails("Details2");
    		livres.add(livre1);
    		livres.add(livre2);
     
    		for(int i=0;i<livres.size();i++) {
    			List<SelectItem> nbLivres = new ArrayList<SelectItem>();;
    			for(int j=0;j<=livres.get(i).getQuantite();j++) {
    				SelectItem selectItem = new SelectItem() ;
    				selectItem.setLabel(""+j);
    				selectItem.setValue(j);
    				nbLivres.add(selectItem);
    			}
     
    			livres.get(i).setSelectItems(nbLivres);
     
    		}
     
    	}
    + getter / setter
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    public class Livre {
    	private String titre;
    	private String details;
    	private Integer quantite;
    	private List<SelectItem> selectItems;
    }
     
    +getter /setter
    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
     
       	<h:dataTable width="100%" value="#{ListLivres.livres}" var="uneLigne" >
        <h:column>
         	<f:facet name="header">
            	<h:outputText value="Titre"/>
            </f:facet>
            	<h:outputText value="#{uneLigne.titre}"/>
       	</h:column>
       	<h:column>
         	<f:facet name="header">
            	<h:outputText value="Details"/>
            </f:facet>
            	<h:outputText value="#{uneLigne.details}"/>
       	</h:column>
       	<h:column>
         	<f:facet name="header">
            	<h:outputText value="Quantité"/>
            </f:facet>
            	<h:selectOneListbox size="1">
            		<f:selectItems value="#{uneLigne.selectItems}"/>
            	</h:selectOneListbox>
       	</h:column>
     
     
       	</h:dataTable>

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 42
    Par défaut
    bon j'ai un truc, mais ca ne me plait pas trop car je touche à mon bean, mais bon.

    Dans mon bean Livre j'ai rajouté:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
    public List<String> getListeQuantite(){
    		if(quantiteLivre!=0){
    			listeQuantite = new ArrayList<String>();
    			for (int i=0;i<=quantiteLivre;i++){
    				listeQuantite.add(String.valueOf(i));
    			}
    		}
    		return listeQuantite;
    	}
    et dans ma jsp pour mon selectOneMenu j'ai rajouté juste dans le selectItems

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <h:selectOneMenu value="#{livreController.selectItem}" binding="#{livreController.selectOneMenu}">
    			<f:selectItems value="#{liv.listeQuantite}" />
    			</h:selectOneMenu>

  12. #12
    Membre confirmé Avatar de koack
    Homme Profil pro
    Inscrit en
    Décembre 2010
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 60
    Par défaut
    Je ne vois plus trop où vous voullez en venir

    Si vous voullez afficher une datatable avec pour chaque ligne une liste correspondant au nombre de livres disponibles vous devrez avoir dans cette liste vos livres correspondant a votre auteur ainsi que la liste de selectItemes.
    Ou alors vous devrez acoller deux datatables mais je pense que vous voullez recuperer le nombre de livres selectionnés pour chaque ligne de livre et la ca devient beaucoup plus compliqué.

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

Discussions similaires

  1. [XL-2010] changer le format de mon bouton en fonction de sa valeur (renseigné ou vide)
    Par jkiii dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 23/12/2013, 11h01
  2. Changer la valeur de mon menu déroulant
    Par cdevl32 dans le forum Langage
    Réponses: 2
    Dernier message: 14/03/2008, 21h24
  3. Réponses: 3
    Dernier message: 11/01/2007, 17h52
  4. [JSF] SelectOneMenu transmission valeur
    Par maximus001ma dans le forum JSF
    Réponses: 1
    Dernier message: 14/08/2006, 14h12
  5. Changer la valeur de la MTU sur un LAN
    Par nin2 dans le forum Réseau
    Réponses: 3
    Dernier message: 19/02/2005, 15h47

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