2016-01-12 1 views
4

J'essaie de mettre à jour la base de données une fois que j'ai changé le RichTextBox et que j'ai quitté le RichTextBox (ie, je ne veux pas forcer l'utilisateur à appuyer sur "). Cependant, mon code renvoie l'exception The method addValueChangeHandler(new ValueChangeHandler<String>(){}) is undefined for the type RichTextArea sur la première ligne.GWT addValueChangeHandler à RichTextBox n'est pas autorisé, un autre moyen requis

       textBoxExistingDescription.addValueChangeHandler(new ValueChangeHandler<String>() { 
           public void onValueChange(ValueChangeEvent<String> event) { 

            //If a record for this Youth Member specific detail line exists then update it else add it. 
            if (ymAwardDetails.getYmsdId() != null) { 
             AsyncCallback<Void> callback = new YMSpecificHandler<Void>(ScoutAwardView.this); 
             rpc.updateYMSpecific(ymAwardDetails.getYmsdId(), ymAwardDetails.getYmsdDetail(), callback); 
            }else{ 
             AsyncCallback<Void> callback = new YMSpecificHandler<Void>(ScoutAwardView.this); 
             rpc.addYMSpecific(youthMemberID, ymAwardDetails.getAdId(), ymAwardDetails.getYmsdDetail(), callback); 
            } 
           } 
          }); 

Existe-t-il une autre façon de procéder?

Répondre

5

En regardant votre exigence, je pense que la même chose que vous pouvez également réaliser en mettant en œuvre addBlurHandler() au lieu de addValueChangeHandler().

L'événement de flou est déclenché lorsque le composant perd le focus. Pour plus d'informations sur l'événement de flou, veuillez lire this. Pour plus d'informations sur GWT BlurEvent, lire this.

2

Tout d'abord, en ajoutant simplement ValueChangeHandler (même si elle était là-bas) fera de votre utilisateur d'envoyer une requête de base de données à chaque fois il tape 1 caractère unique, ce qui est beaucoup de frais généraux si vous me demandez

Enregistrement d'une sauvegarde chaque fois que l'accent est perdu peut être mieux, mais il y a un cas où l'utilisé n'a pas cliqué sur la boîte et toujours fermé l'onglet en quelque sorte, ce qui est non-plaisant.

Ce que je suggère est à:

  1. RichTextArea Sous-classe:

    MyRichTextArea public class étend RichTextArea implémente HasValueChangeHandlers {

    @Override 
        public HandlerRegistration addValueChangeHandler(ValueChangeHandler<String> handler) { 
         return this.addHandler(handler, ValueChangeEvent.getType()); 
        } 
    
    } 
    
  2. Créer un champ de minuterie à l'intérieur de la sous-classe.

  3. Dans le constructeur pour le RichTextBox ajouter gestionnaire d'événements keyDown:

Si la minuterie est en marche - prolonger sur 3 secondes, commencez autre minuterie.

Lorsque la minuterie de 3 secondes est terminée sans autres touches - déclenchez un appel de service pour enregistrer votre texte. Voilà comment je l'ai fait

+0

J'ai implémenté la solution de @RAS (merci RAS) et, après beaucoup de tests, cela fonctionne pour moi sans la minuterie. Merci quand même Pomah. – Glyn