2015-04-14 3 views
1

Я использую GWT UiBinder ... но я не могу использовать @UiHandler, потому что он не работает.GWT @UiHandler dont work

XML

<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent"> 
<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder" 
    xmlns:g="urn:import:com.google.gwt.user.client.ui"> 

     <g:Button ui:field="btn" text="btn"></g:Button> 

</ui:UiBinder> 

Java

import com.google.gwt.core.client.GWT; 
import com.google.gwt.event.dom.client.ClickEvent; 
import com.google.gwt.uibinder.client.UiBinder; 
import com.google.gwt.uibinder.client.UiField; 
import com.google.gwt.uibinder.client.UiHandler; 
import com.google.gwt.user.client.Window; 
import com.google.gwt.user.client.ui.Button; 
import com.google.gwt.user.client.ui.Composite; 
import com.google.gwt.user.client.ui.Widget; 

public class HowToHelp extends Composite { 

    interface HowToHelpUiBinder extends UiBinder<Widget, HowToHelp> { 
    } 

    private static HowToHelpUiBinder uiBinder = GWT 
      .create(HowToHelpUiBinder.class); 

    @UiField 
    Button btn; 

    public HowToHelp() { 
     initWidget(uiBinder.createAndBindUi(this)); 
    } 

    @UiHandler("btn") 
    void handleClick(ClickEvent e) { 
     Window.alert("Hello, AJAX"); 
    } 

} 

Window.alert ("Hello, AJAX"); никогда не называется. Я сделал то, что был принят на официальном GWT: http://www.gwtproject.org/doc/latest/DevGuideUiBinder.html

Существует Complect проект с некоторой погрешностью zip

+0

код выглядит нормально. Вы уверены, что в проекте нет ничего плохого? Возможно, вы не сохранили изменения до обновления приложения? Вы пробовали очистить проект и т. Д.? Есть ли ошибки/исключения в DevMode или в консоли браузера? –

+0

I второй Игорь, представленный код не является проблемой. Вы видите кнопку на странице, если вы используете режим super dev, сервер sdm запускается, как ожидалось? Вы перекомпилировали с помощью sdm? – thst

+0

Нет ошибок, никаких исключений не работает. Я использую super dev и вижу кнопку normaly – liwston

ответ

1

Из связанного почтового индекса, кода отсутствует вопрос:

package source.client; 

import com.google.gwt.core.client.EntryPoint; 
import com.google.gwt.user.client.ui.RootPanel; 

public class UiHandlerTest implements EntryPoint { 

    @Override 
    public void onModuleLoad() { 
     RootPanel.getBodyElement().appendChild(new TheHandlerTest("My Button").getElement()); 

    } 

} 

Проблема в том что вы добавляете виджет в другой виджет, не делая фактически , добавьте его часть;). Вместо этого вы используете , добавляя содержимое из uibinder-widget к содержимому виджета RootPanel.

Вместо этого (она короче/проще, и не будет иметь эту ошибку):

RootPanel.get().add(new TheHandlerTest("My Button")); 
+0

Спасибо, мой друг, это действительно имеет смысл – liwston

+0

Рад это услышать - не забудьте опубликовать весь код в следующий раз;). –