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 : 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
@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 : 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
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 !