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

Wicket Java Discussion :

Contrôle de saisie


Sujet :

Wicket Java

  1. #1
    Membre confirmé
    Inscrit en
    Février 2007
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 63
    Par défaut Contrôle de saisie
    Bonjour,

    J'implémente une petite application Web avec Wicket. J'ai fais une page qui comprend plusieurs onglets. Dans un de ces onglet j'ai un petit formulaire qui me permet de rechercher un personne par son numéro via un formulaire. Voici le code de l'onglet:
    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
     
    public class FindPersonForm extends Panel{
     
    	TextField<String> numField;
     
    	public FindPersonForm(String id){
    		super(id);
     
    		numField = new TextField<String>("num", new Model<String>());
    		numField.setRequired(true);
    		numField.add(StringValidator.exactLength(10));
    		numField.add(new PatternValidator(MetaPattern.DIGITS));
     
     
    		Form<Object> form = new Form<Object>("form") {
    			protected void onSubmit() {
    				String num=numField.getValue();
    				findPerson(num);
    			}
    		};
     
    		form.add(numField);
    		add(form);
    		numField.setEscapeModelStrings(true);
    		add(new FeedbackPanel("feedback"));	
    	}
    }
    Grâce au StringValidator et au PatternValidator je recupère bien une erreur en cas de mauvaise syntaxe mais je voudrais personnaliser le feedback avec une phrase à moi du genre :"Veuillez saisir un numéro valide".
    J'ai regardé du coté des propertyModel mais je ne comprend rien. Est-ce que quelqu'un connait la manoeuvre?

    Merci d'avance,

  2. #2
    Membre émérite

    Inscrit en
    Décembre 2004
    Messages
    584
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 584
    Par défaut
    salut

    en 1er lieu, pour info et si tu t'impatientes, saches que la ML wicket, cf http://wicket.apache.org/community.html, (en anglais) est vraiment très réactive : j'ai souvent eu/vu des réponses dans les 5 minutes. De même, elle constitue une bonne base de départ pour les recherches, via nabble notamment :
    http://old.nabble.com/Apache-Wicket-f13974.html

    quoiqu'il en soit, concernant les fichiers properties, de façon générale, wicket cherche les correspondances par ordre décroissant de "proximité" : cad que wicket regarde d'abord au niveau du 1er composant englobant le composant en question puis, à défaut, va voir dans les propriétés de MyApplication (la classe centrale d'une application wicket).

    du coup, si tu veux donner une nouvelle traduction pour toutes les utilisations d'une certaine propriété, facile, il suffit de la mettre dans MyApplication.properties (ou xml c'est selon), dans le même package que MyApplication.java.

    dans le cas précis qui te concerne, il te faut d'abord trouver les clés des propriétés qui t'intéressent. Je ne sais pas s'il y a un settings wicket pour les afficher, ou à défaut quelle classe précisément mettre en debug pour voir les traces qui vont bien. Par contre, fainéant comme je suis, je suis directement allé dans les sources.

    Dans StringValidator.java j'ai ainsi trouvé, dans l'inner class ExactLengthValidator :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    		@Override
    		protected Map<String, Object> variablesMap(IValidatable<String> validatable)
    		{
    			final Map<String, Object> map = super.variablesMap(validatable);
    			map.put("length", (validatable.getValue() != null) ? new Integer(
    				(validatable.getValue()).length()) : 0);
    			map.put("exact", new Integer(length));
    			return map;
    		}
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    		@Override
    		protected String resourceKey()
    		{
    			return "StringValidator.exact";
    		}
    Autrement dit, je pense que la propriété est StringValidator.exact avec les variables exact et length.

    Pour PatternValidator.java, j'ai trouvé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    	protected Map<String, Object> variablesMap(IValidatable<String> validatable)
    	{
    		final Map<String, Object> map = super.variablesMap(validatable);
    		map.put("pattern", pattern.pattern());
    		return map;
    	}
    tandis que la javadoc dit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     * The error message will be generated with the key "PatternValidator" and the message keys that can
     * be used are:
     * <p>
     * <ul>
     * <li>${pattern}: the pattern which failed to match</li>
     * <li>${input}: the input the user gave</li>
     * <li>${name}: the name of the <code>Component</code> that failed</li>
     * <li>${label}: the label of the <code>Component</code> - either comes from
     * <code>FormComponent.labelModel</code> or resource key [form-id].[form-component-id] in that order
     * </li>
    Je regarde ce soir s'il y a moyen de trouver la chose plus aisément

    ++

  3. #3
    Membre émérite

    Inscrit en
    Décembre 2004
    Messages
    584
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 584
    Par défaut
    j'viens de voir une solution plus simple, aller directement dans le ficher Application.properties, au niveau de la classe Application.properties, on y lit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    StringValidator.exact='${input}' is not exactly ${exact} characters long.
    (...)
    PatternValidator='${input}' does not match pattern '${pattern}'.
    et dans Application_fr.properties :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    PatternValidator='${input}' ne correspond pas au mod\u00e8le '${pattern}'.
    StringValidator.exact manque ! Il serait bon d'ouvrir un ticket Jira avec des propositions de traductions qui tiennent la route. Je te laisse faire ? Aller, le lien pour Jira : http://issues.apache.org/jira/browse/WICKET

    Comme ça tu pourras même dire avoir contribué à Wicket, good on you !

    ++

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 9
    Par défaut
    Salut, j'ai eu le même problématique que toi.

    Les messages d'erreur sont gérés par Wicket à l'aide des fichiers de propriétés et du pattern "convention".

    Voici un exemple de code :
    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
     
    public class MonthPanel extends Panel {
     
        private FormComponent<Integer> monthsC;
     
        public MonthPanel(String id, int initialMonth) {
            super(id);
            monthsC = new DropDownChoice<Integer>("months", new Model<Integer>(new Integer(initialMonth)), listMonthIDs, choiceRenderer);
            /*
             * On rajoute un converter pour valider que le type de retour soit un
             * entier.
             */
            monthsC.setType(Integer.class);
            /*
             * On valide que le mois soit compris entre 1 et 12.
             */
            monthsC.add(new MinimumValidator<Integer>(1));
            monthsC.add(new MaximumValidator<Integer>(12));
            add(monthsC);
     
      }
    }
    et le fichier de propriété correspondant :
    months.IConverter.Integer=Le mois est invalide
    months.MinimumValidator=Le mois est invalide
    months.MaximumValidator=Le mois est invalide
    ou months correspond au wicketId.

    Dans ton cas, tu peux mettre dans le fichier de propiété de ta page web quelque chose du genre :

    num.StringValidator.exact=donnee incorrecte

  5. #5
    Membre confirmé
    Inscrit en
    Février 2007
    Messages
    63
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 63
    Par défaut
    Merci de vos réponse,

    J'été en formation depuis Lundi donc je n'ai pas pu me pencher sur la question. Je dois dire que vos réponse m'ont beaucoup aidé. J'ai réussi à modifier le message pour le PatternValidator en rajoutant dans mon fichier properties :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    PatternValidator= Entrer un numéro sur 10 chiffres !
    En revanche pour le StringValidator.exactLength(10) impossible de faire la correspondance dans le fichier de propriété en faisant un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    num.StringValidator=trop court
    ou
    StringValidator.exactLength=trop court
    ou
    StringValidator.exact=trop court
    ou
    StringValidator.length=trop court
    Je vais de ce pas faire un tour sur la MailingList wicket bien que mon anglais soit déplorable.

    Merci,

  6. #6
    Membre émérite

    Inscrit en
    Décembre 2004
    Messages
    584
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 584
    Par défaut
    salut Nico87

    je viens de faire le test et perso ça marche nickel avec dans mon fichier propriétés :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    StringValidator.exact=Mon texte ${exact}
    du coup je suis un peu perplexe...

    as tu pensé à vérifier :
    - que ton fichier propriété est le bon ?
    - que les locales collent ?
    - que tu avais bien sauvé tes modifs et redémarré ton application entre temps ?

    A défaut, tu peux tenter de mettre ta propriété au niveau de ton application Wicket... si cela ne marche toujours pas, poste plus de détails, peut être pourrons nous aider !

    bon courage en tout cas

    ++

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

Discussions similaires

  1. Contrôle de saisie formulaire
    Par miram dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 02/02/2006, 08h33
  2. contrôle de saisie sur un espace
    Par oceane751 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 12/01/2006, 12h04
  3. contrôle de saisie menu déroulant
    Par shnouf dans le forum Général JavaScript
    Réponses: 11
    Dernier message: 05/01/2006, 16h30
  4. contrôle de saisie
    Par oceane751 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 05/01/2006, 11h24
  5. [debutant] contrôle de saisie et formulaire
    Par oceane751 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 27/11/2005, 22h29

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