2017-05-26 1 views
1

J'ai un problème avec le widget Suggox GWT.Conflit GWT entre la validation de formulaire et la sélection de SuggestBox

J'ai un gestionnaire sur chaque champ du formulaire pour le soumettre avec la touche d'entrée. Cependant, je voudrais remplir la boîte de suggestion avec la touche d'entrée aussi.

Ainsi, je suis en train de trouver une bonne façon: 1. lorsque je choisis un élément suggère boîte (menu suggestion apparaît) et appuyez sur Entrée, sélectionnez cette option 2. lorsque le menu suggestion montre pas sous forme de validation

Toute idée

Répondre

1

Quand vous regardez SuggestBox constructeurs, vous trouverez this:

public SuggestBox(SuggestOracle oracle, 
        ValueBoxBase<java.lang.String> box, 
        SuggestBox.SuggestionDisplay suggestDisplay) 

oracle - fournit des suggestions basées sur le contenu actuel du widget texte

boîte

- le widget texte

de suggestDisplay - la classe utilisée pour afficher des suggestions

SuggestionDisplay est ce que vous devez vérifier si isSuggestionListShowing().


code Exemple:

@UiField 
FormPanel uiFormPanel; 
@UiField 
TextBox uiTextBox; 
@UiField(provided = true) 
SuggestBox uiSuggestBox; 

public SubmitTest() { 

    // provided fields 
    MultiWordSuggestOracle oracle = new MultiWordSuggestOracle(); 
    oracle.add("Cat"); 
    oracle.add("Dog"); 
    oracle.add("Horse"); 
    oracle.add("Canary"); 

    TextBox box = new TextBox(); 
    final DefaultSuggestionDisplay suggestDisplay = new DefaultSuggestionDisplay(); 

    uiSuggestBox = new SuggestBox(oracle, box, suggestDisplay); 

    initWidget(uiBinder.createAndBindUi(this)); 

    uiFormPanel.addSubmitHandler(new SubmitHandler() { 
     @Override 
     public void onSubmit(SubmitEvent event) { 
      event.cancel(); 
      Window.alert("Submit!"); 
     } 
    }); 

    uiTextBox.addKeyDownHandler(new KeyDownHandler() { 
     @Override 
     public void onKeyDown(KeyDownEvent event) { 
      if(event.getNativeKeyCode() == KeyCodes.KEY_ENTER) 
       uiFormPanel.submit(); 
     } 
    }); 

    uiSuggestBox.addKeyDownHandler(new KeyDownHandler() { 
     @Override 
     public void onKeyDown(KeyDownEvent event) { 
      if(event.getNativeKeyCode() == KeyCodes.KEY_ENTER) 
       if(!suggestDisplay.isSuggestionListShowing()) 
        uiFormPanel.submit(); 
     } 
    }); 
} 

UiBinder:

<g:FormPanel ui:field="uiFormPanel"> 
    <g:HTMLPanel> 
     <g:TextBox ui:field="uiTextBox" /> 
     <g:SuggestBox ui:field="uiSuggestBox" /> 
    </g:HTMLPanel> 
</g:FormPanel> 
+0

A travaillé bien, merci. Juste une chose: isSuggestionListShowing() est obsolète dans l'interface SuggestionDisplay. A dû convertir à l'implémentation par défaut: ((DefaultSuggestionDisplay) entitySuggestBox.getSuggestionDisplay()). IsSuggestionListShowing() – Biologeek