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 :

[SelectCheckboxMenu] Créer dynamiquement le composant


Sujet :

JSF Java

  1. #1
    Membre actif
    Profil pro
    100
    Inscrit en
    Juillet 2007
    Messages
    585
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : 100

    Informations forums :
    Inscription : Juillet 2007
    Messages : 585
    Points : 270
    Points
    270
    Par défaut [SelectCheckboxMenu] Créer dynamiquement le composant
    Bonjour,

    J'aimerais créer un panel qui contient plusieurs SelectCheckboxMenu (selon une liste chargée en DB), lesquelles contiennent une liste d'éléments (également selon une liste en DB).
    J'ai commencé à écrire qqch comme ça :
    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 PanelGrid constructPanel() {
    	PanelGrid pg = new PanelGrid();
     
    	if (CollectionUtils.isNotEmpty(lstDomaine)) {
    		pg.setColumns(lstDomaine.size());
     
    		for (Domaine domaine : lstDomaine) {
    			SelectCheckboxMenu menuDomaine = new SelectCheckboxMenu();
    			menuDomaine.setLabel(domaine.getNom());
    			menuDomaine.setValue("#{saisirLienForm.selectedDomaine}");
     
    			if (CollectionUtils.isNotEmpty(lstInterv)) {
    				List<SelectItem> lstIntervItems = new ArrayList<>();
    				for (DomaineIntervention interv : lstInterv) {
    					lstIntervItems.add(new SelectItem(interv));
    				}
    			}
    		}
    	}
     
     
    	return pg;
    }
    Le problème est que je ne vois pas trop comment gérer le truc.

    Je ne trouve pas comment définir les "SelectedItems".
    Ensuite, pour ce qui est de ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    menuDomaine.setValue("#{saisirLienForm.selectedDomaine}");
    C'est bien comme ça qu'il faut faire ? La même notation que dans une page xhtml ("#{saisirLienForm.selectedDomaine}") ?

    Merci pour votre aide

  2. #2
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 310
    Points : 9 522
    Points
    9 522
    Billets dans le blog
    1
    Par défaut
    Pourquoi passer par du code serveur ? Tu peux utiliser l'attribut "rendered" pour afficher ou non un composant dans ta page.
    Les données utilisées pour construire tes listes d'options peuvent venir du managedBean
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <f:selectItems value="#{checkboxView.cities}" />
    Il y a un truc qui m'échappe dans ce que tu veux faire, peux-tu être plus précis ?
    C'est une histoire d'affichage dépendant de la saisie d'un autre élément ? du contenu des options qui dépend d'un autre élément ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre actif
    Profil pro
    100
    Inscrit en
    Juillet 2007
    Messages
    585
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : 100

    Informations forums :
    Inscription : Juillet 2007
    Messages : 585
    Points : 270
    Points
    270
    Par défaut
    En fait, j'ai dans une table en DB des "domaines". Des éléments peuvent être ajoutés / supprimés à cette liste.

    J'ai également une table des interventions en DB, qui sont liées à un domaine (FK), là aussi, des éléments peuvent être ajoutés / suprimés.

    J'aimerais avoir pour chaque domaine qui se trouvent en DB, une SelectCheckboxMenu contenant les interventions (correspondantes au domaine) qui se trouvent en DB.
    Sachant qu'au prochain affichage, le domaine 1 ne sera peut-être plus en DB et ne sera donc plus affiché.

    Nom : Domaine.png
Affichages : 120
Taille : 48,5 Ko

  4. #4
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 310
    Points : 9 522
    Points
    9 522
    Billets dans le blog
    1
    Par défaut
    Tu peux passer par une boucle <c:forEach>, un peu dans ce genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <p:panelGrid columns="#{leManager.domaines.size}">
        <c:forEach items="#{leManager.domaines}" var="item">
            <p:selectCheckboxMenu ...>
                <f:selectItems value="#{item.interventions}" ... />
            </p:selectCheckboxMenu>
        </c:forEach>
    </p:panelGrid>
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre actif
    Profil pro
    100
    Inscrit en
    Juillet 2007
    Messages
    585
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : 100

    Informations forums :
    Inscription : Juillet 2007
    Messages : 585
    Points : 270
    Points
    270
    Par défaut
    Tiptop, merci beaucoup

  6. #6
    Membre actif
    Profil pro
    100
    Inscrit en
    Juillet 2007
    Messages
    585
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : 100

    Informations forums :
    Inscription : Juillet 2007
    Messages : 585
    Points : 270
    Points
    270
    Par défaut
    En fait j'ai quand même un soucis

    Dans ma page j'ai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <p:panelGrid columns="#{saisirMandatForm.listDomaineCompetence.size()}" style="width:1473px" columnClasses="????" >
    	<c:forEach items="#{saisirMandatForm.listDomaineCompetence}" var="domaine">
    		<p:outputPanel id="displayDI" style="width:250px; margin-top:30px">
    			<p:dataList value="#{saisirMandatForm.mapSelectedDomaineIntervention.get(domaine)}" var="intervention" emptyMessage="Aucune intervention">
    				#{intervention.nom}
    			</p:dataList>
    		</p:outputPanel>							    
    	</c:forEach>
    </p:panelGrid>
    Le problème est pour mettre à jour dans mon bean les éléments sélectionnés. Je ne dois pas gérer ça de la bonne manière car ça ne marche pas très bien.
    J'utilise une map pour gérer la liste des interventions sélectionnées par domaine :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Map<DomaineCompetence, List<DomaineIntervention>> mapSelectedDomaineIntervention;
    Et la méthode qui met à jour :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    public void setSelectedDomainesIntervention(DomaineIntervention[] domainesInterv) {
    	for (DomaineIntervention di : domainesInterv) {
    		List<DomaineIntervention> lst = mapSelectedDomaineIntervention.get(di.getDomaineCompetence());
    		if (lst == null) {
    			lst = new ArrayList<DomaineIntervention>();
    		}
    		if (!lst.contains(di)) {
    			lst.add(di);
    		}
    		mapSelectedDomaineIntervention.put(di.getDomaineCompetence(), lst);
    	}
    }
    Le truc c'est que si je désélectionne tout dans le composant, cette méthode est appelée mais le tableau transmis est null, donc je n'entre pas dans la boucle et je ne peux pas vider la liste correspondante au domaine (en plus je ne connais pas le domaine).
    J'ai bien essayé de le passer en paramètre comme ceci mais j'ai un erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <f:setPropertyActionListener target="#{saisirMandatForm.selectedDomaine}" value="#{domaine}" />
    javax.faces.view.facelets.TagException: /secured/mandat/saisirMandat.xhtml @306,125 <f:setPropertyActionListener> Parent is not of type ActionSource, type is: org.primefaces.component.selectcheckboxmenu.SelectCheckboxMenu@715c7790
    Du coup comment est-ce que je pourrais gérer les interventions sélectionnées par domaine ?

    De plus, j'ai remarqué que si je clique sur la case qui correspond à "sélectionner tout", je ne passe pas dans la méthode et ne peux donc pas mettre à jour la liste.

    Et pour finir, comment est-ce que je peux définir les columnClasses dans la table (en rouge dans le code)

    Merci pour votre aide

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

Discussions similaires

  1. Retrouver sur un clic un composant créer dynamiquement
    Par PadawanDuDelphi dans le forum Composants VCL
    Réponses: 4
    Dernier message: 10/10/2006, 11h17
  2. Réponses: 6
    Dernier message: 24/10/2005, 08h43
  3. Création dynamique de composants et destruction
    Par cpdump dans le forum Composants VCL
    Réponses: 4
    Dernier message: 19/01/2005, 17h57
  4. [MFC] Créer dynamiquement une classe
    Par vanitom dans le forum MFC
    Réponses: 9
    Dernier message: 11/12/2004, 13h23
  5. Réponses: 4
    Dernier message: 13/05/2004, 13h15

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