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
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 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
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"));
            }
        }
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
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;
    }
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?

Merci pour vos réponses