2017-05-26 8 views
1

GWT SuggestBoxウィジェットに問題があります。フォーム検証とSuggestBox選択の間でGWTが競合する

フォームの各フィールドには、Enterキーで送信するハンドラがあります。 しかし、私はあまりにも入力キーと提案のボックスを埋めるしたいと思います。 1.提案ボックス(提案メニューが表示されている)で項目を選択し、Enterキーを押すと、この項目が選択されます 2.提案メニューが表示されない場合

任意のアイデアあなたがSuggestBoxコンストラクタを見てみると

答えて

1

、あなたがthisを見つける:

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

Oracleは - あなたがisSuggestionListShowing()かどうかを確認するために必要なものであるの提案

SuggestionDisplayを表示するために使用されるクラス - テキストウィジェット

suggestDisplay - テキストウィジェット

ボックスの現在の内容に基づいた提案を提供しています。


例コード:

@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

、うまくいったおかげ。ちょっとしたこと:isSuggestionListShowing()はSuggestionDisplayインターフェースでは非推奨です。デフォルト実装にキャストしなければならなかった: ((DefaultSuggestionDisplay)entitySuggestBox.getSuggestionDisplay())。isSuggestionListShowing() – Biologeek

関連する問題