GWT:将UIBinder与HTML模板一起使用......如何让它工作?

时间:2011-01-29 11:20:10

标签: gwt uibinder

我目前正在尝试使用GWT的UIBinder功能,但没有成功。我已多次阅读文档,但它不包含完整的故事。也许你可以帮助我。

目前我所知道的是:

1)我需要创建例如一个HelloWorld.ui.xml文件,其中包含一些小部件布局。 2)我需要创建一个相应的HelloWorld类。

以下是我无法找到的信息:

A)我在哪里放置HelloWorld.ui.xml文件,以使GWT能够找到它?

B)如何将HelloWorld组件添加到例如小组?

文档非常稀缺,并且由已经对GWT了解太多的人明确写出来,看看新手不知道什么。

3 个答案:

答案 0 :(得分:2)

A)您需要将HelloWorld.ui.xml文件放在与包含该ui.xml文件逻辑的窗口小部件类相同的包中。类名应该是HelloWorld(为了简单起见,我说你需要使用相同的名称,但是可以通过代码为ui.xml文件使用不同的名称。)

B)你的HelloWorld类应该是一个扩展小部件的类。就像任何“普通”小部件一样,它可以添加到任何面板中。

以下是将HelloWorld.ui.xml绑定到HelloWorld窗口小部件类中的代码:

public class HelloWorld extends Composite /*or extend any widget you want*/ {
    //This defines an interface that represents this specific HelloWorld.ui.xml file.
    interface MyUiBinder extends UiBinder<Widget, HelloWorld> {}

    // This code is for GWT so it can generate the code from your HelloWorld.ui.xml
    private static MyUiBinder uiBinder = GWT.create(MyUiBinder.class);

    //Constructor
    public HelloWidgetWorld() {
        // This binds the HelloWorld.ui.xml with this widget
        initWidget(uiBinder.createAndBindUi(this));
        ...
    }

    ...
}

答案 1 :(得分:2)

此概述解释了所有内容:http://code.google.com/webtoolkit/doc/latest/DevGuideUiBinder.html

  1. 您将HelloWorld.ui.xml放在与HelloWorld.java文件相同的文件夹中。
  2. 像这样(取自上面的链接):

    public class HelloWorld extends UIObject { // Could extend Widget instead
        interface HelloWorldUiBinder extends UiBinder<DivElement, HelloWorld> {}
        private static HelloWorldUiBinder uiBinder =  
              GWT.create(HelloWorldUiBinder.class);
    
        // div element created via UiBinder
        private DivElement divElement;
    
        public HelloWorld() {
            // createAndBindUi 
            divElement = uiBinder.createAndBindUi(this);
            // now you can add created DivElement to your panel
        }
    };
    

答案 2 :(得分:1)

以下是两个完整的教程和HelloWorld示例:

1)用于具有GWT控制的UI Binder:     http://blog.jeffdouglas.com/2010/01/19/gwt-uibinder-hello-world-tutorial/

2)对于具有纯HTML的UI Binder:    哎呀! StackOverflow不允许我发布两个超链接。所以我会在另一个答案中发布第二个答案,或者对这个答案发表评论。