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 :

[DataTable] Choix valeurs possibles d'une colonne en fonction d'une autre


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 [DataTable] Choix valeurs possibles d'une colonne en fonction d'une autre
    Bonjour,

    Dans ma datatable, j'aimerais pouvoir mettre en place le principe suivant :

    La colonne 1 permet de sélectionner un objet (avec un p:autoComplete). Cet objet contient une liste d'objets (d'un autre type).
    Dans la colonne 2, j'aimerais pouvoir ne sélectionner (grâce à un p:selectOneMenu) que les objets contenus dans la liste de l'objet choisi dans la colonne 1.

    Lorsque j'édite la colonne suivante, il faut mettre à jour les choix possibles de la colonne 2, de même que lorsque je modifie la valeur de la colonne 1.

    Je ne pense pas être loin de la solution mais il me manque qqch.

    La table est en mode editRow, avec l'event rowEditInit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <p:ajax event="rowEditInit" listener="#{saisirHeuresForm.setSelectedHeureForEdit}" />
     
    public void setSelectedHeureForEdit(RowEditEvent event) {
    	DataTable table = (DataTable) event.getSource();
    	selectedHeure = (Heure) table.getRowData();
    }
    Les colonnes 1 et 2:
    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
     
    <p:column headerText="@ #{msg['Mandat']}" style="width:7%">
    	<p:cellEditor>
    		<f:facet name="output">
    			<h:outputText value="#{heure.mandat.numero}" />
    		</f:facet>
    		<f:facet name="input">
    			<p:autoComplete id="mandat" value="#{heure.mandat}"
    				completeMethod="#{saisirHeuresForm.completeMandat}" var="mandat"
    				itemLabel="#{mandat.numero}" itemValue="#{mandat}"
    				converter="MandatConverter" forceSelection="true" size="50"
    				immediate="true" />
    		</f:facet>
    	</p:cellEditor>
    </p:column>
     
    <p:column headerText="#{msg['MaitreDOeuvre']}" style="width:10%">
    	<p:cellEditor>
    		<f:facet name="output">
    			<h:outputText value="#{heure.maitreOuvrage}" />
    		</f:facet>
    		<f:facet name="input">
    			<p:selectOneMenu id="mo" value="#{heure.maitreOuvrage}">
    				<f:selectItem itemLabel="Select One" itemValue="#{null}" />
    				<f:selectItems value="#{saisirHeuresForm.listHeureMaitreOeuvre}" />
    			</p:selectOneMenu>
    		</f:facet>
    	</p:cellEditor>
    </p:column>
    La méthode qui retourne la liste des objets de la colonne 2 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    public List<Identite> getListHeureMaitreOeuvre() {
    	List<Identite> lst = new ArrayList<Identite>();
    	if (selectedHeure != null && selectedHeure.getMandat() != null && CollectionUtils.isNotEmpty(selectedHeure.getMandat().getListMandatIdentite())) {
    		for (MandatIdentite mandatIdt : selectedHeure.getMandat().getListMandatIdentite()) {
    			lst.add(mandatIdt.getIdentite());
    		}
    	}
     
    	return lst;
    }
    La liste des éléments de la colonne 2 ne se met pas à jour au bon moment, voir pas à chaque fois.

    Qqun peut-il m'aider ?
    Merci pour votre aide

  2. #2
    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
    un petit up

  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
    Personne ?

  4. #4
    Membre actif
    Homme Profil pro
    Développeur Java/JavaEE
    Inscrit en
    Août 2014
    Messages
    194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur Java/JavaEE

    Informations forums :
    Inscription : Août 2014
    Messages : 194
    Points : 290
    Points
    290
    Par défaut
    Bonjour,

    Il faut juste créer un composant ajax qui permet d'écouté ton autocomplete et met à jours ton selectOneMenu.
    Je te file une exemple tu peux le tester:

    test.xhtml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    <h:form>
    	<p:growl id="msgs" showDetail="true" />
    		<p:autoComplete id="auto" autocomplete="true" value="#{testController.selectedValue}" completeMethod="#{testController.completeText}">
    		<p:ajax event="itemSelect" listener="#{testController.launchAuto()}" update="car" />
    		</p:autoComplete>
     
    		<p:outputLabel for="car" value="Grouping: " />
    	        <p:selectOneMenu id="car" value="#{testController.selectedOneMenu}">
    	            <f:selectItem itemLabel="Select One" itemValue="" />
    	            <f:selectItems value="#{testController.listOneMenu}" />
    	        </p:selectOneMenu>
     
    </h:form>
    TestController.java
    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
     
    @ManagedBean
    @ViewScoped
    public class TestController implements Serializable{
    	/**
             * 
             */
    	private static final long serialVersionUID = -8249237448274544292L;
    	private String selectedValue;
    	private List<String> list1;
     
    	private String selectedOneMenu;
    	private List<String> listOneMenu;
    	@PostConstruct
    	public void init(){
    		list1=new ArrayList<String>();
    		list1.add("list1");
    		list1.add("list11");
    	}
     
    	public void launchAuto(){
     
    		listOneMenu=list1;
    		System.out.println("valeur affecter");
    	}
     
    	 public List<String> completeText(String query) {
    		 System.out.println("appel reussi");
    	        List<String> results = new ArrayList<String>();
    	        for(int i = 0; i < 10; i++) {
    	            results.add(query + i);
    	        }
    	        return results;
    	    }
     
    	//********* getters and setters **********//
    	public String getSelectedValue() {
    		return selectedValue;
    	}
     
    	public void setSelectedValue(String selectedValue) {
    		this.selectedValue = selectedValue;
    	}
     
    	public List<String> getList1() {
    		return list1;
    	}
     
    	public void setList1(List<String> list1) {
    		this.list1 = list1;
    	}
     
    	public String getSelectedOneMenu() {
    		return selectedOneMenu;
    	}
     
    	public void setSelectedOneMenu(String selectedOneMenu) {
    		this.selectedOneMenu = selectedOneMenu;
    	}
     
    	public List<String> getListOneMenu() {
    		return listOneMenu;
    	}
     
    	public void setListOneMenu(List<String> listOneMenu) {
    		this.listOneMenu = listOneMenu;
    	}
     
    }

  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
    Merci beaucoup, ça marche droit comme je voulais :-)

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

Discussions similaires

  1. [XL-2010] Se placer sur une colonne en fonction d'une valeur temps
    Par Titian dans le forum Excel
    Réponses: 7
    Dernier message: 17/07/2014, 16h22
  2. [Toutes versions] Incrémenter une colonne en fonction d'une autre
    Par simon17 dans le forum VBA Access
    Réponses: 9
    Dernier message: 03/11/2010, 16h27
  3. [XL-2003] Compter valeurs d'une colonne en fonction d'une autre colonne
    Par greggy dans le forum Excel
    Réponses: 2
    Dernier message: 03/11/2009, 12h51
  4. Somme d'une colonne en fonction d'une autre
    Par j.mathieu dans le forum Excel
    Réponses: 6
    Dernier message: 16/08/2008, 14h55
  5. Contraite NULL sur une colonne en fonction d'une autre colon
    Par speedy1496 dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 25/04/2004, 19h29

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