私はGWTが初めてです。MultiWordSuggestOracleを使用して入力された単純なSuggestBoxがあります。ユーザーはこの SuggestBox にデータを入力し、既存の提案と一致するものが見つかった場合はそれで十分です。以下のように、SelectionHandler コードでこの値を取得できます。
display.getSuggestBox().addSelectionHandler(new SelectionHandler<Suggestion>() {
public void onSelection(SelectionEvent<Suggestion> event) {
String selectedProperty = ((SuggestBox)event.getSource()).getValue();
// do something with the property value
}
});
しかし、ユーザーは提案オラクルにまだない値を入力することができます。その場合、この値を読み取って何かを行う必要があり、新しいデータとして db に保存される可能性があります。(私が探しているのは提案を表示するブラウザのナビゲーション ウィジェットのようなもので、ユーザーは提案を拾ったり、新しいエントリを入力して続行したりできます。ユーザーが入力したこの新しいテキストを取得する方法が必要でしたか? ボタンクリックでデータを読み込みます。私が試したのはこれです。
display.getSaveBtn().addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
String selectedProperty = display.getSuggestBox().getValue();
//String selectedProperty2 = display.getSuggestBox().getText();
// Blank in both cases :(
// tried display.getSuggestBox().getTextBox().getValue(),but blank again
}
});
onChange() イベント ハンドラーを使用しようとしました (以下に示すように)
display.getSuggestBox().addValueChangeHandler(new ValueChangeHandler<String>() {
public void onValueChange(ValueChangeEvent<String> event) {
String selectedProperty = ((SuggestBox)event.getSource()).getValue();
Window.alert("on change -- "+selectedProperty);
}
});
これは、1 つのシナリオを除いて正常に機能しています。オラクルに「createTicketWsdl」と「createTicketTimeout」という 2 つの提案があるとします。ユーザーが'cr'と入力すると、これら 2 つのオプションが選択されます。キーボードの ENTER を押して'createTicketWsdl' を選択すると、私のアラートは正しい 'createTicketWsdl' を出力します。しかし、彼がmouse を使用して'createTicketWsdl' を選択すると、私のアラートは'cr'を出力します (理解を深めるためにスクリーンショットを投稿しようとしましたが、新しいユーザーであるため許可されていません)。 「createTicketWsdl」というのは、彼が選択したものだからです)。アラートを出力した直後に、SuggestBox の値が「createTicketWsdl」に変わります。
提案ボックスの値を取得する方法はありますか? カスタムウィジェットのソースコードが利用可能な同様のスレッドGWT SuggestBox + ListBox Widgetを見ました。しかし、私が望むのは単に SuggestBox から現在の値を取得することであり、簡単な方法があればいいのにと思っているので、それを試すのに苦労しませんでした。
ご助力いただきありがとうございます!