Bonjour,
J'utilise keyFilter avec un mask "pint" pour ne saisir que des nombres.
Mais après validation et conversion, je peux saisir des caractères
mon composant
le validator
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 <composite:implementation> <p:outputLabel value="#{cc.attrs.libelleLabel}" for="#{cc.attrs.idComposant}" styleClass="#{cc.attrs.styleLabel}" /> <p:inputText id="#{cc.attrs.idComposant}" label="#{cc.attrs.libelleLabel}" value="#{cc.attrs.value}" styleClass="#{cc.attrs.styleZoneSaisie}" size="12" maxlength="11" disabled="#{cc.attrs.disabled}"> <f:validator validatorId="sirenValidator" for="#{cc.attrs.idComposant}" /> <f:converter converterId="sirenConverter" for="#{cc.attrs.idComposant}" /> <p:ajax event="change" update="#{cc.attrs.idComposant}" /> </p:inputText> <pe:keyFilter for="#{cc.attrs.idComposant}" mask="pint"/> </composite:implementation>
le converter
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 if (StringUtils.isNotBlank(sirenSaisi)) { // -- 1. Le numéro SIREN doit être composé de 8 chiffres + 1 chiffre de contrôle // Suppression des espaces pour vérifier la chaîne saisie String sirenSaisiSansEspace = StringUtils.deleteWhitespace(sirenSaisi); if (sirenSaisiSansEspace.chars().count() != 9) { throw new ValidatorException(new FacesMessage(FacesMessage.SEVERITY_ERROR, "SIREN - Longueur invalide : Le numéro SIREN doit être composé de 9 chiffres", "Le numéro SIREN doit être composé de 9 chiffres")); } else if (!StringUtils.isNumeric(sirenSaisiSansEspace)) { throw new ValidatorException(new FacesMessage(FacesMessage.SEVERITY_ERROR, "SIREN - Format invalide : Le numéro SIREN doit être composé de 9 chiffres", "Le numéro SIREN doit être composé uniquement de chiffres")); } // -- 2. Vérification de l'exactitude du N°SIREN if (!estNumeroSirenValide(sirenSaisiSansEspace)) { throw new ValidatorException(new FacesMessage(FacesMessage.SEVERITY_ERROR, "SIREN - Numéro saisi inexact : corrigez votre saisie", "Le numéro SIREN doit être composé de 9 chiffres qui répondent à la règle de contrôle d'un SIREN")); } }
j'ai également essayer de changer le mask par regEx="/[0-9]{3}\s?[0-9]{3}\s?[0-9]{3}/" pensant que l'ajout d'espace pouvant poser des problèmes mais le champ n'accepte plus rien. Il est pas beau mon regEx?
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 @Override public Object getAsObject(FacesContext arg0, UIComponent arg1, String arg2) { return formatSiren(arg2); } /* (non-Javadoc) * @see javax.faces.convert.Converter#getAsString(javax.faces.context.FacesContext, javax.faces.component.UIComponent, java.lang.Object) */ @Override public String getAsString(FacesContext arg0, UIComponent arg1, Object arg2) { return formatSiren((String) arg2); } private String formatSiren(String siren){ if (siren.length() <= 3){ return siren; }else if(siren.length() <= 6){ return siren.substring(0, 3) + " " + siren.substring(4, siren.length()) ; }else if(siren.length() <= 9){ return siren.substring(0, 3) + " " + siren.substring(3, 6) + " " + siren.substring(6, siren.length()) ; } return siren; }
Merci pour vos réponses
Partager