2013-10-25 438 views
0

我需要添加一個處理程序,火災時,選擇點擊哪些然後將驗證的值。當前的功能正在驗證(通過模糊上的textInput),直到從提示框記錄整個值之前,因此沒有通過驗證(當它應該)。GWT- Suggestbox監聽器不工作

這裏是我試過右下方其中i實現了TextInput頁的suggestbox:

public void onModuleLoad() { 

SuggestBox box = new SuggestBox(createListOracle(),myTextBox()); 

box.addSelectionHandler(new SelectionHandler<Suggestion>() { 

    @Override 
    public void onSelection(SelectionEvent<Suggestion> event) { 
     Validate(); 
    } 
}); 

另一個解決辦法是插上時suggestbox選自焦點的駿馬,這將完成同樣的事情爲了我。

問題是處理程序從不開火。斷點永遠不會到達。

+0

這個問題實際上是由引起在Suggestbox,一個bug根據:http://codinginthetrenches.com/2012/catching-value-change-events-from-the-gwt-suggestbox/ – TheJavaBeast

+0

但我的問題是解決了修復,我不能讓SelectionHandler像解決方案所說的那樣工作。 – TheJavaBeast

回答

4

然後看看ValueBoxBase。

您將自己的實例傳遞給的構造函數的SuggestBox

公共SuggestBox(SuggestOracle甲骨文,ValueBoxBase盒)

文本框是ValueBoxBase的一個子類,等你的選擇有ClickListeners :

  1. 之外創建文本框,並將其添加監聽器,然後將它傳遞給構造SuggestBox(SuggestOracle甲骨文,ValueBoxBase盒)
  2. Overridi NG SuggestBox,使構造採取「更好的」 ValueBoxBase(例如文本框),並偵聽器方法添加到您的implmentation

我嘗試這樣做樣品,它的工作原理

 TextBox suggestTextBox = new TextBox(); 
    suggestTextBox.addClickHandler(new ClickHandler() { 

     @Override 
     public void onClick(ClickEvent event) { 
      Window.alert("tada"); 
     } 
    }); 
    SuggestOracle oracle = new MultiWordSuggestOracle(" ,"); 

    final SuggestBox nameField = new SuggestBox(oracle, suggestTextBox); 
+0

謝謝你的幫助!但我不知道我明白你告訴我要做什麼。所以我的文件層次結構是Widget - > TextInput - > Contains Suggestbox ...當你說「在外部創建你的文本框」時,你的意思是將promptBox與TextInput分開嗎? – TheJavaBeast

+0

另外,所以你不知道什麼可能導致onSelection處理程序無法正常工作?它似乎是我的問題的流行解決方案,如果我可以確定可能導致它不會觸發的原因,那麼解決方案會更容易?我注意到更改處理程序是觸發的,但是它取得了舊值,並且當新值被「完全」選中時,調試器中沒有任何反應。 – TheJavaBeast

+0

試試我剛添加到答案的樣本。它的作品 –

0

你也可以使用先進的提示框https://code.google.com/p/advanced-suggest-select-box/

,讓你在事件的控制:你可以重寫valueSelected()或valueTyped(),並決定是否要驗證這一點。

的lib的演示是在這裏 http://1vu-widgets.appspot.com/IntoGwt.html

+0

嗯,謝謝你的建議,但我研究這個,我認爲這可能會推我的資源從頭開始。我需要的僅僅是爲了提示點擊偵聽器。我不明白爲什麼這麼難,必須有一個簡單的解決方案。 – TheJavaBeast