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] java.lang.IllegalArgumentException lors de la validation d'un composant Primefaces Calendar


Sujet :

JSF Java

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2015
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Hauts de Seine (Île de France)

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

    Informations forums :
    Inscription : Janvier 2015
    Messages : 27
    Points : 27
    Points
    27
    Par défaut [PrimeFaces] java.lang.IllegalArgumentException lors de la validation d'un composant Primefaces Calendar
    Bonjour,
    J'ai un composant Primefaces <p:calendar> qui est censé accepter que des horaires sous la forme HH:mm:ss et qui doit lancer un message d'erreur personnalisé en cas de saisie non conforme, pour ça j'ai créé un Validateur mais je reçois une exception du type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    GRAVE: Servlet.service() for servlet [Faces Servlet] in context with path [/access-control-web] threw exception [Illegal pattern character 'n'] with root cause
    java.lang.IllegalArgumentException: Illegal pattern character 'n'
    Voici mon code pour l'interface :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <p:calendar id="time" value="#{egressSystemBean.deviceTimeToBeSynchronized}" timeOnly="true">
    	<f:validator validatorId="TimeValidator" ></f:validator>
    </p:calendar>
    Validateur :
    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
    26
    27
    28
    29
    @FacesValidator("TimeValidator")
    public class TimeValidator implements Validator {
     
        private Pattern pattern;
     
        private Matcher matcher;
     
        private static final String HH_MM_SS_PATTERN = "([01]?[0-9]|2[0-3]):[0-5][0-9]";
     
        private static final Logger logger = LoggerFactory.getLogger(TimeValidator.class);
     
        public TimeValidator() {
            pattern = Pattern.compile(HH_MM_SS_PATTERN);
        }
     
        @Override
        public void validate(FacesContext context, UIComponent component, Object value) throws ValidatorException {
            matcher = pattern.matcher(value.toString());
            if (!matcher.matches()) {
     
                FacesMessage msg = new FacesMessage(MessageUtils.getMessage("timeValidationMsgTitle"), MessageUtils.getMessage("timeValidationMsg"));
                msg.setSeverity(FacesMessage.SEVERITY_ERROR);
                throw new ValidatorException(msg);
     
            }
     
        }
     
    }

  2. #2
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    Bonjour,

    Le composant calendar ne supporte qu'un type java.util.Date, tu n'as pas besoin d'implémenter un validator, tu dois seulement spécifier le pattern. Si deviceTimeToBeSynchronized est de type String, tu dois utiliser un convertDateTime pour effectuer la conversion.
    Code xhtml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <p:calendar id="time" value="#{egressSystemBean.deviceTimeToBeSynchronized}" timeOnly="true" pattern="HH:mm:ss">
        <f:convertDateTime pattern="HH:mm:ss"/> <!-- Si deviceTimeToBeSynchronized est de type String-->
    </p:calendar>

    A+.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 03/08/2011, 08h44
  2. java.lang.StackOverflowError lors de l'ajout dans une ArrayList
    Par alys56 dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 02/04/2008, 18h54
  3. Réponses: 0
    Dernier message: 26/12/2007, 17h28
  4. Réponses: 9
    Dernier message: 03/06/2007, 21h40

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