Bonjour,

J'ai une page qui affiche un tableau d'objets. Depuis ce tableau, j'ai un bouton qui ouvre un dialogue permettant de créer un nouvel objet.
Je rencontre quelques problèmes d'utilisation de mon dialogue.

Voici le dialogue en question (présent dans le même formulaire que le tableau qui fait appel à ce dialogue) :
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
 
<!-- Dialogue de création d'une facture -->
			<p:dialog header="#{msg['NouvelleFactureProvisoire']}" widgetVar="createDlg"
            		resizable="false" id="createDlg" showEffect="fade" hideEffect="fade" >
 
                <div align="center">
	                <p:panelGrid columns="2" styleClass="panelSansBordure">
						<h:outputLabel for="mandat" value="@#{msg['Mandat']} : " styleClass="mandatory" />
						<p:autoComplete id="mandat" value="#{gestionFactDebiteursProvisoireForm.mandat}"
								completeMethod="#{gestionFactDebiteursProvisoireForm.completeMandat}" var="mandat"
								itemLabel="#{mandat.numero}" itemValue="#{mandat}"
								required="true" requiredMessage="Le mandat est obligatoire"
								converter="MandatConverter" forceSelection="false" size="40" >
							<p:ajax event="itemSelect" update="mandatMo, mandatObjet" />
							<p:column>
								<h:outputText value="#{mandat.numero}" />
							</p:column>
							<p:column>
								<h:outputText value="#{mandat.listMandatIdentiteToString}" />
							</p:column>
							<p:column>
								<h:outputText value="#{mandat.objet}" />
							</p:column>
						</p:autoComplete>
 
						<h:outputText value="" />
						<p:inputText id="mandatMo" value="#{gestionFactDebiteursProvisoireForm.mandat.listMandatIdentiteToString}"
								size="40" disabled="true" >
							<p:tooltip id="mandatmott" for="mandatMo" trackMouse="true"
								value="#{saisirFactCreancierForm.selectedMandat.listMandatIdentiteToString}" />							
							</p:inputText>
 
						<h:outputText value="" />
						<p:inputText id="mandatObjet" value="#{gestionFactDebiteursProvisoireForm.mandat.objet}"
								size="40"  disabled="true" >
							<p:tooltip id="mandatobjettt" for="mandatObjet" trackMouse="true"
								value="#{saisirFactCreancierForm.selectedMandat.objet}" />
						</p:inputText>
 
						<h:outputLabel for="montantHt" value="#{msg['MontantHT']} (hono. et frais): " styleClass="mandatory" />
						<h:inputText id="montantHt" value="#{gestionFactDebiteursProvisoireForm.montantHt}" >
							<f:convertNumber pattern="#,##0.00" locale="fr_CH" />
						</h:inputText>
 
						<h:outputLabel for="remarque" value="#{msg['Description']} (2'000) : " />
						<p:inputTextarea id="remarque" maxlength="2000" autoResize="false" styleClass="unresizable"
							value="#{gestionFactDebiteursProvisoireForm.remarque}" rows="4" cols="37" />
 
						<h:outputLabel for="papierEntete" value="#{msg['PapierEntete']} : " />
						<p:selectOneMenu id="papierEntete" value="#{gestionFactDebiteursProvisoireForm.typePapierEnteteCi}" 
								style="width:220px" >
				           	<f:selectItem itemLabel="" itemValue="#{null}" />
				           	<f:selectItems value="#{gestionFactDebiteursProvisoireForm.listTypePapierEntete}" />
				        </p:selectOneMenu>
					</p:panelGrid>
 
					<h:panelGrid columns="1" >
						<h:outputText value="Sous-traitants : " styleClass="formulaireTexteEvidence" />
						<p:dataTable id="sousTraitantsTable"
							value="#{gestionFactDebiteursProvisoireForm.listeSousTraitants}" 
							var="sousTraitant" widgetVar="sousTraitantsTable"
							rowKey="#{sousTraitant.id}"
							emptyMessage="Aucun sous-traitant défini"
							sortMode="multiple" editable="true" editMode="cell"
							scrollable="true" scrollHeight="140"
							style="margin-bottom:10px; width:600px;" >
 
                                            <f:facet name="header">
						<h:panelGrid id="actionmain" columns="1" style="width:480px;" styleClass="panelSansBordure">
					            	<p:column>
					            		<p:commandLink id="createSTBtn" update="sousTraitantsTable" action="#{gestionFactDebiteursProvisoireForm.ajouterSousTraitant}" 
						         				styleClass="ui-icon ui-icon-action-ajouter" >
						         			<p:tooltip id="ajouterlinktoolSTtip" for="createSTBtn" value="Ajouter un sous-traitant" />
						         		</p:commandLink>
									</p:column>
							 	</h:panelGrid>
			        		</f:facet>
 
			        		<p:column headerText="#" style="width:10%" >
				        		<h:panelGrid id="actions" columns="1" cellpadding="5" styleClass="panelSansBordure" >  
				         	 		<p:commandLink id="supprimerSt" onclick="PF('confDeleteDlg').show()" 
				         	 				styleClass="ui-icon ui-icon-action-supprimer" >
				         	 			<f:setPropertyActionListener target="#{gestionFactDebiteursProvisoireForm.selectedFacture}" value="#{facture}"/>
				         	 			<p:tooltip id="supprimersttooltip" for="supprimerSt" value="#{msg['Supprimer']}" />
				         	 		</p:commandLink>
				         	 	</h:panelGrid>
				        	</p:column>
 
							<p:column headerText="#{msg['Remarque']}" style="width:60%;" >
								<p:cellEditor>
				        			<f:facet name="output">
										<h:outputText value="#{sousTraitant.sousTraitant}" />
				        			</f:facet>
 
				        			<f:facet name="input">
				        				<h:inputText value="#{sousTraitant.sousTraitant}" size="50" />
				        			</f:facet>
				        		</p:cellEditor>
							</p:column>
 
							<p:column headerText="#{msg['Montant']}" style="width:30%; text-align:right" >
				        		<p:cellEditor>
				        			<f:facet name="output">
										<h:outputText value="#{sousTraitant.montant}" >
											<f:convertNumber pattern="#,##0.00" locale="fr_CH" />
										</h:outputText>
				        			</f:facet>
 
				        			<f:facet name="input">
				        				<h:inputText value="#{sousTraitant.montant}" >
											<f:convertNumber pattern="#,##0.00" locale="fr_CH" />
										</h:inputText>
				        			</f:facet>
				        		</p:cellEditor>
							</p:column>
						</p:dataTable>
				  	</h:panelGrid>	
					<h:panelGrid columns="2" cellpadding="10">
	                	<p:commandButton id="createButton" action="#{gestionFactDebiteursProvisoireForm.creerFacture}" oncomplete="PF('createDlg').hide()" 
	                            update=":gestionFactDebiteursProvisoireForm:factures, messages" process="@this" value="#{msg['Enregistrer']}" />
	                	<p:commandButton id="cancelCreationButton" onclick="PF('createDlg').hide()" value="#{msg['Annuler']}"/>
	                </h:panelGrid>
                </div>
            </p:dialog>

1. La validation ne fonctionne pas :
Le champ "mandat" est obligatoire mais si je ne renseigne rien et enregistre, ça passe (ça pète plus loin avec la contrainte "not null" de la BD)

2. Les champs ne sont pas réinitailisés
Si j'ouvre une 2ème fois pour dialogue, les champs sont remplis avec les valeurs de la dernière ouverture du dialogue.
Malgré la réinitialisation dans le managedBean
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
<p:commandLink id="createFactureBtn" update=":gestionFactDebiteursProvisoireForm:createDlg" oncomplete="PF('createDlg').show()" 
	styleClass="ui-icon ui-icon-action-ajouter" >
	<p:tooltip id="ajouterlinktooltip" for="createFactureBtn" value="#{msg['AjouterUneFacture']}" />
</p:commandLink>
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
 
public void creerFacture() {
		FactureProvisoire facture = new FactureProvisoire();
		facture.setSocieteLieu(selectedSocieteLieu);
		facture.setDomaineCompetence(selectedDomaineCompetence);
		facture.setDecompteAnnee(selectedAnnee);
		facture.setDecompteTrimestre(selectedTrimestre);
		if (isUserDirector()) {
			facture.setViseeParDirecteur(true);
		}
		facture.setMandat(getMandat());
		facture.setMontantHT(getMontantHt());
		facture.setRemarque(getRemarque());
		facture.setTypePapierEnteteCi(getTypePapierEnteteCi());
		calculerMontantFacture(facture);
		if (CollectionUtils.isNotEmpty(listeSousTraitants)) {
			for (FactureProvisoireSousTraitant st : listeSousTraitants) {
				st.setFactureProvisoire(facture);
				facture.addSousTraitant(st);
			}
		}
 
		m_financeService.saveFactureProvisoire(facture);
 
		listFacture.add(facture);
 
		resetDialogFields();
	}
 
	private void resetDialogFields() {
		mandat = null;
		montantHt = 0.0;
		remarque = null;
		typePapierEnteteCi = null;
		listeSousTraitants.clear();
	}
3. Seul la valeur du mandat est récupérée dans le bean lors de l'enregistrement
Lorsque je clique sur enregistrer, dans mon bean, mes propriétés ne contiennent pas les valeurs saisies dans le dialogue, hormis la propriété "mandat"

4. Dans le tableau affiché dans le dialogue, l'action d'ajout d'un élément dans le tableau ne met pas à jour le tableau
L'action créé un nouvel élément et l'ajoute à la liste affichée dans le tableau, mais aucune ligne ne s'affiche dans le tableau

Bref, mon dialogue est loin de fonctionner comme je le souhaiterais.

Qqun peut-il m'aider et me guider pour résoudre ces petits problèmes ?
Merci d'avance pour votre aide