IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JSF Java Discussion :

[PrimeFaces Extensions] KeyFilter pint accepte caractères après validation


Sujet :

JSF Java

  1. #1
    Membre habitué
    Avatar de CPI_en_mousse
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2006
    Messages
    332
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 332
    Points : 168
    Points
    168
    Par défaut [PrimeFaces Extensions] KeyFilter pint accepte caractères après validation
    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
    Tout à une fin, sauf le saucisson qui en as 2.
    -----------------

  2. #2
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 310
    Points : 9 522
    Points
    9 522
    Billets dans le blog
    1
    Par défaut
    Je n'ai jamais utilisé keyFilter mais il se pourrait que le rafraîchissement du champ d'input le "déconnecte"... Peux-tu essayer comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <p:inputText ....>
        <pe:keyFilter mask="pint"/>
    </p:inputText>
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre habitué
    Avatar de CPI_en_mousse
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2006
    Messages
    332
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 332
    Points : 168
    Points
    168
    Par défaut
    Salut OButterlin

    effectivement le fait de placer le keyFilter à l'intérieur de l'input text corrige cet effet de bord.

    Autre question, pourquoi lorsque j'utilise le regEx du filterKey, je ne plus saisir aucun caractère?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <pe:keyFilter for="#{cc.attrs.idComposant}" regEx="/^([0-9]{3}\s?[0-9]{3}\s?[0-9]{3})$/"/>
    l’expression est ok ( testé ici : http://www.regexr.com/)

    j'ai testé sur ce composant mais je souhaiterais l'utiliser sur un autre où j'ai le même soucis, à l'intérieur ou pas de la balise.....

    Merci
    Tout à une fin, sauf le saucisson qui en as 2.
    -----------------

  4. #4
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 310
    Points : 9 522
    Points
    9 522
    Billets dans le blog
    1
    Par défaut
    Ta regexp n'autorise pas de caractères, c'est normal que tu ne puisses pas en saisir (ou j'ai mal compris ta question ?)
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre habitué
    Avatar de CPI_en_mousse
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2006
    Messages
    332
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 332
    Points : 168
    Points
    168
    Par défaut
    problème de syntaxe : par caractère, j'incluais tous les caractères alpha numériques...

    j'ai testé avec l'expression [a-z0-9] sans succès également. J'ai vu sur le même problème sur divers forums mais aucune solution n'a été apportée.

    Sur le show case de primefaces extensions (http://www.primefaces.org/showcase-e.../keyFilter.jsf), les expressions sont terminées par un "i". Peut tu me dire à quoi sert il? j'ai quand même testé avec ou sans "i" pour le même résultat -> rien n'est permis.
    Tout à une fin, sauf le saucisson qui en as 2.
    -----------------

  6. #6
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 310
    Points : 9 522
    Points
    9 522
    Billets dans le blog
    1
    Par défaut
    Le "i" est là pour dire que la recherche est case-insensitive.

    Que veux-tu pouvoir saisir exactement ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Membre habitué
    Avatar de CPI_en_mousse
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2006
    Messages
    332
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 332
    Points : 168
    Points
    168
    Par défaut
    dans mon exemple, je voudrais saisir un numéro siren de format "ccc ccc ccc" où c représente un chiffre et où les espaces ne sont pas obligatoires.

    La regEx que j'ai mise en place semble fonctionner correctement, par contre, le fait de mettre l'attribut de regEx dans le keyFilter bloque l'ensemble des caractères alphabétiques et numériques et autres.
    Tout à une fin, sauf le saucisson qui en as 2.
    -----------------

  8. #8
    Candidat au Club
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2016
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1
    Points : 3
    Points
    3
    Par défaut
    voila le lien ou j'ai trouvé la reponse a ma question
    https://www.primefaces.org/showcase/...eyFilter.xhtml

Discussions similaires

  1. Réponses: 3
    Dernier message: 19/08/2014, 13h14
  2. SQL et GUID : Valeur de caractère non valide pour la ....
    Par jackfirst72 dans le forum Bases de données
    Réponses: 5
    Dernier message: 06/03/2007, 10h46
  3. actualiser page après validation formulai dans autre fenêtre
    Par allowen dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 05/01/2006, 16h02
  4. Réponses: 4
    Dernier message: 18/10/2005, 23h22
  5. [JDBC]Caractère non-valide
    Par calimero82 dans le forum JDBC
    Réponses: 2
    Dernier message: 16/02/2005, 14h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo