[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:
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:
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:
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