Bonjour,
Je me tourne vers vous car il y a des choses qui m'échappent dans la validation d'un formulaire.
Admettons que j'ai un formulaire avec 5 champs :
- 2 inputText (montant travaux, montant honoraires)
- 1 calendar (date de fin)
- 1 selectBooleanCheckbox (est archivé)
- 1 autocomplete (Lieu)
- 1 bouton pour enregistrer
J'aimerais pourvoir valider ce formulaire avant de l'enregistrer, en respectant ces tests :
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 <p:inputText id="montantTravaux" value="#{saisirMandatForm.montantTravaux}" size="50" maxlength="15" style="width:200px" disabled="#{saisirMandatForm.userLectureSeule}" immediate="true" /> <p:inputText id="montantHono" value="#{saisirMandatForm.montantHonorairesFrais}" size="50" maxlength="15" style="width:200px" disabled="#{saisirMandatForm.userLectureSeule}" /> <p:calendar id="dateFin" value="#{saisirMandatForm.dateFin}" size="25" label="fin" pattern="dd.MM.yyyy" mask="true" disabled="#{saisirMandatForm.userLectureSeule}" navigator="true" immediate="true" /> <p:selectBooleanCheckbox itemLabel="Archivé" value="#{saisirMandatForm.archive}" disabled="#{saisirMandatForm.userLectureSeule}" immediate="true" /> <p:autoComplete id="lieudomaine" value="#{saisirMandatForm.societeLieuDomaineComp}" completeMethod="#{saisirMandatForm.completeLieuxDomaines}" var="lieu" itemLabel="#{lieu}" itemValue="#{lieu}" converter="SocieteLieuDomaineCompConverter" forceSelection="true" size="25" disabled="#{saisirMandatForm.userLectureSeule}" required="true" requiredMessage="#{msg['DonneesDeBase']} - #{msg['LieuDomaineDeCompetenceEstObligatoire']}" validator="#{saisirMandatForm.validerSaisie}" queryDelay="1000" > </p:autoComplete> <p:commandButton value="#{msg['Enregistrer']}" icon="ui-icon-check" style="margin:15px" action="#{saisirMandatForm.enregistrerMandat}" rendered="#{not saisirMandatForm.userLectureSeule}" />
- Date de fin est obligatoire si "est archivé" est coché
- Montant travaux est doit être entre 100.- et 10'000.- si Lieu correspond à l'objet XX
J'ai essayé toute sorte de chose, avec l'attribut validator="validerSaisie" sur les différents champs et onChange="submit();" .... mais des fois les données arrivent coté serveur, d'autres fois non.
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 public void validerSaisie(FacesContext context, UIComponent uiComponent, Object objet) { if (getArchive() && getDateFin() == null) { FacesMessage message = Messages.getMessage("LaDateDeFinEstObligatoire", FacesMessage.SEVERITY_ERROR, null); throw new ValidatorException(message); } if (getSocieteLieuDomaineComp().equals(XX)) { if (getMontantTravaux() < 100 || getMontantTravaux() > 10000) { FacesMessage message = Messages.getMessage("MontantTravauxHorsNormes", FacesMessage.SEVERITY_ERROR, null); throw new ValidatorException(message); } } }
Faut-il mettre onChange="submit();" sur chacun des champs qui doivent être validés ? Y'a-t-il mieux à faire ?
Sur quels champs faut-il mettre le validator="..." ?
Bref, comment est-ce que je peux faire pour que la validation se fasse correctement ?
Partager