GWT - smartGWT : formatter & mask sur composant ComboBoxItem

GWT - smartGWT : formatter & mask sur composant ComboBoxItem - Java - Programmation

Marsh Posté le 30-04-2010 à 14:19:26    

Bonjour,
 
J'ai une question concernant l'utilisation de composants smartGWT, et plus précisément du composant ComboBoxItem.
 
Mon besoin initial :

  • L'utilisateur peut choisir une valeur parmis une collection de String...
  • cette collection est relativement conséquente (plus de 115 000 entrées)

pour pallier aux problèmes de performances, la "valueMap" associée (collection des valeurs possibles pour l'auto-complétion) est récupérée à la volée par appel asynchrone.
 
 
 
Jusque là tout se passe bien, sauf que les valeurs possibles respectent certains patterns : caractères compris entre [A-Z0-9_-.], donc pas de minuscule, pas de signes de ponctuation "exotiques", pas d'espaces.
 
 
 
Je souhaite donc mettre un filtre/formatteur sur la saisie dans un composant ComboBoxItem.
 
Ce genre de filtre/formatteur existe pour les composant TextItem :

Code :
  1. TextItem component = new TextItem();
  2. // auto-convert characters to uppercase
  3. component.setCharacterCasing(CharacterCasing.UPPER);
  4. // add input mask
  5. component.setMask(">[0-9A-Z_-.]" );


 
 
Mais ça ne semble pas exister pour les autres composants :/
 
Il y a un moyen de faire ça ?

Reply

Marsh Posté le 30-04-2010 à 14:19:26   

Reply

Marsh Posté le 30-04-2010 à 14:50:09    

Bon je me réponds tout seul :D
 
 
En fait ce genre de modification est gérer manuellement sur les composants autre que TextItem.
 
pour les autres composants, il est nécessaire de rattacher un FormItemInputTransformer qui va se charger d'interpréter et de formatter correctement les inputs de l'utilisateur.
 
Pour ce faire :
 

Code :
  1. component.setInputTransformer(new FormItemInputTransformer() {
  2.      
  3.       public Object transformInput(DynamicForm form, FormItem item, Object value, Object oldValue) {
  4.         // allow on-the-fly conversion to retrieve formatted value
  5.         if (value != null) {
  6.           String valueUp = (((String)value).toUpperCase();
  7.           if (valueUp.matches("[A-Z0-9\\.\\-_]+" )) {
  8.             // allow only uppercase char, digits, '.', '_' and '-' entries
  9.             return valueUp;
  10.           }
  11.           // invalid input : return previous entry
  12.           return oldValue;
  13.         }
  14.         return value;
  15.       }
  16.     });


 
et ça fonctionne nickel :jap:


Message édité par cartemere le 30-04-2010 à 15:40:28
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed