[PrimeFaces] TreeTable - Impossible d'update les petit-enfants
Bonjour,
Je suis débutant sur PrimeFaces et je dois créer une TreeTable pour afficher un formulaire dynamiquement et modifiable mais j'ai un soucis de sauvegarde.
Tout marche bien sauf la sauvegarde des petits-enfants. Seuls les enfants direct du root se sauvegarde bien avec les données à jour, tous les autres gardent leur valeur initiale.
Pour afficher mon formulaire, j'utilise mon FormService:
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 30 31 32 33 34 35
| @Service("formService")
@Scope
public class FormService {
TreeNode root = new DefaultTreeNode(record, null);
List<TreeNode> treeNodeList = new ArrayList<>();
int length = record.getThemeVal().get(0).getOrientation().size();
//orientation
for (int i = 0; i < length; i++) {
int orientIndex = treeNodeList.size();
treeNodeList.add(new DefaultTreeNode(
record.getThemeVal().get(0).getOrientation().get(i), root));
//lever
int levLength = record.getThemeVal().get(0).getOrientation().get(i).getLever().size();
for (int j = 0; j < levLength; j++) {
int leverIndex = treeNodeList.size();
treeNodeList.add(new DefaultTreeNode(
record.getThemeVal().get(0).getOrientation().get(i).getLever().get(j), treeNodeList.get(orientIndex)));
//action
int actLength = record.getThemeVal().get(0).getOrientation().get(i).getLever().get(j).getAction().size();
for (int k = 0; k < actLength; k++) {
treeNodeList.add(new DefaultTreeNode(
record.getThemeVal().get(0).getOrientation().get(i).getLever().get(j).getAction().get(k), treeNodeList.get(leverIndex)));
}
}
}
return root;
} |
Et j'affiche les données dans la vue:
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 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 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126
| <h:form id="form">
<p:treeTable value="#{tabRecordController.root}" var="node" scrollable="true" scrollWidth="100%" resizableColumns="true" liveResize="true">
<p:column style="width: 600px;"
headerText="Orientations">
<h:outputText value="#{node}" />
</p:column>
<p:column>
<p:selectBooleanCheckbox
value="#{node.supportingPieces[0].supportingPiece[0].supportingPieceVal.supportingpieceval_val_bool}" />
<h:outputText value="#{node.supportingPieces[0].supportingPiece[0].supportingPieceVal.supportingpieceval_id}" />
</p:column>
<p:column>
<p:selectBooleanCheckbox
value="#{node.supportingPieces[0].supportingPiece[1].supportingPieceVal.supportingpieceval_val_bool}" />
<h:outputText value="#{node.supportingPieces[0].supportingPiece[1].supportingPieceVal.supportingpieceval_id}" />
</p:column>
<p:column>
<p:selectBooleanCheckbox
value="#{node.supportingPieces[0].supportingPiece[2].supportingPieceVal.supportingpieceval_val_bool}" />
<h:outputText value="#{node.supportingPieces[0].supportingPiece[2].supportingPieceVal.supportingpieceval_id}" />
</p:column>
<p:column>
<p:selectBooleanCheckbox
value="#{node.supportingPieces[0].supportingPiece[3].supportingPieceVal.supportingpieceval_val_bool}" />
<h:outputText value="#{node.supportingPieces[0].supportingPiece[3].supportingPieceVal.supportingpieceval_id}" />
</p:column>
<p:column>
<p:selectBooleanCheckbox
value="#{node.supportingPieces[0].supportingPiece[4].supportingPieceVal.supportingpieceval_val_bool}" />
<h:outputText value="#{node.supportingPieces[0].supportingPiece[4].supportingPieceVal.supportingpieceval_id}" />
</p:column>
<p:column>
<p:selectBooleanCheckbox
value="#{node.supportingPieces[0].supportingPiece[5].supportingPieceVal.supportingpieceval_val_bool}" />
<h:outputText value="#{node.supportingPieces[0].supportingPiece[5].supportingPieceVal.supportingpieceval_id}" />
</p:column>
<p:column style="width: 70px" headerText="Enjeu">
<h:selectOneMenu id="enjeu" value="#{node.supportingPieces[0].supportingPiecesVal.valueLevelType.valueleveltype_valuelevel}"
required="true" label="Enjeu">
<f:selectItem itemLabel="Non défini" itemValue="0" />
<f:selectItem itemLabel="Faible" itemValue="1" />
<f:selectItem itemLabel="Moyen" itemValue="2" />
<f:selectItem itemLabel="Fort" itemValue="3" />
</h:selectOneMenu>
</p:column>
<p:column>
<p:selectBooleanCheckbox
value="#{node.supportingPieces[1].supportingPiece[0].supportingPieceVal.supportingpieceval_val_bool}" />
<h:outputText value="#{node.supportingPieces[1].supportingPiece[0].supportingPieceVal.supportingpieceval_id}" />
</p:column>
<p:column>
<p:selectBooleanCheckbox
value="#{node.supportingPieces[1].supportingPiece[1].supportingPieceVal.supportingpieceval_val_bool}" />
<h:outputText value="#{node.supportingPieces[1].supportingPiece[1].supportingPieceVal.supportingpieceval_id}" />
</p:column>
<p:column>
<p:selectBooleanCheckbox
value="#{node.supportingPieces[1].supportingPiece[2].supportingPieceVal.supportingpieceval_val_bool}" />
<h:outputText value="#{node.supportingPieces[1].supportingPiece[2].supportingPieceVal.supportingpieceval_id}" />
</p:column>
<p:column>
<p:selectBooleanCheckbox
value="#{node.supportingPieces[1].supportingPiece[3].supportingPieceVal.supportingpieceval_val_bool}" />
<h:outputText value="#{node.supportingPieces[1].supportingPiece[3].supportingPieceVal.supportingpieceval_id}" />
</p:column>
<p:column>
<p:selectBooleanCheckbox
value="#{node.supportingPieces[1].supportingPiece[4].supportingPieceVal.supportingpieceval_val_bool}" />
<h:outputText value="#{node.supportingPieces[1].supportingPiece[4].supportingPieceVal.supportingpieceval_id}" />
</p:column>
<p:column>
<p:selectBooleanCheckbox
value="#{node.supportingPieces[1].supportingPiece[5].supportingPieceVal.supportingpieceval_val_bool}" />
<h:outputText value="#{node.supportingPieces[1].supportingPiece[5].supportingPieceVal.supportingpieceval_id}" />
</p:column>
<p:column style="width: 70px" headerText="Niveau de prise en compte">
<h:selectOneMenu id="niveauDePriseEnCompte" value="#{node.supportingPieces[1].supportingPiecesVal.valueLevelType.valueleveltype_valuelevel}"
required="true" label="Niveau de prise en compte">
<f:selectItem itemLabel="Non défini" itemValue="0" />
<f:selectItem itemLabel="Faible" itemValue="1" />
<f:selectItem itemLabel="Moyen" itemValue="2" />
<f:selectItem itemLabel="Fort" itemValue="3" />
</h:selectOneMenu>
</p:column>
<p:column>
<p:selectBooleanCheckbox
value="#{node.expectedEffects[0].effect[0].effect_value_bool}" />
<h:outputText value="#{node.expectedEffects[0].effect[0].effect_id}" />
</p:column>
<p:column>
<p:selectBooleanCheckbox
value="#{node.expectedEffects[0].effect[1].effect_value_bool}" />
<h:outputText value="#{node.expectedEffects[0].effect[1].effect_id}" />
</p:column>
<p:column>
<p:selectBooleanCheckbox
value="#{node.expectedEffects[0].effect[2].effect_value_bool}" />
<h:outputText value="#{node.expectedEffects[0].effect[2].effect_id}" />
</p:column>
<p:column>
<p:selectBooleanCheckbox
value="#{node.expectedEffects[0].effect[3].effect_value_bool}" />
<h:outputText value="#{node.expectedEffects[0].effect[3].effect_id}" />
</p:column>
<p:column>
<p:selectBooleanCheckbox
value="#{node.expectedEffects[0].effect[4].effect_value_bool}" />
<h:outputText value="#{node.expectedEffects[0].effect[4].effect_id}" />
</p:column>
</p:treeTable>
<p:commandButton id="btn_add" value="Save"
action="#{tabRecordController.persistRecord}" />
</h:form> |
Ensuite, les valeurs du formulaire sont mise à jour lorsque j'appelle ma méthode persistRecord depuis mon controller TabRecordController.
Quand j'affiche les données récupéré dans la console, je vois effectivement que seuls les données à jour des enfants direct sont récupérés...
Je ne trouve pas d'où peut venir le problème.
Si quelqu'un aurait une idée, j'en serai ravis. Si vous avez besoin de plus de détail, n'hésitez pas!
Merci d'avance !