Validation d'un formulaire
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
Code:
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}" /> |
J'aimerais pourvoir valider ce formulaire avant de l'enregistrer, en respectant ces tests :
- 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
Code:
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);
}
}
} |
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.
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 ?