GWT @UiHandler不工作

时间:2015-04-14 13:17:50

标签: java gwt uibinder

我正在使用GWT UiBinder ...但我不能使用@UiHandler,因为它不起作用。

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>

爪哇

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

有一个包含错误zip

的complect项目

1 个答案:

答案 0 :(得分:1)

从链接的zip中,问题中缺少代码:

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"));