如何在GWT'中使用按钮;那是尤宾德吗?

如何在GWT'中使用按钮;那是尤宾德吗?,gwt,uibinder,Gwt,Uibinder,在MyPanel.ui.xml中: <button class="btn" ui:field="myButton">Save</button> 在MyEntryPoint.java中: if (....) RootPanel.get().add(new MyPanel()); 所以我想我真的不明白如何使用UiBinder 我打算将HTML与ui:field=“…”一起使用,以便web设计师可以在ui字段上设置class=“xx”之类的内容。大多数GWT文档都假

在MyPanel.ui.xml中:

<button class="btn" ui:field="myButton">Save</button>
在MyEntryPoint.java中:

if (....)
    RootPanel.get().add(new MyPanel());
所以我想我真的不明白如何使用UiBinder

我打算将HTML与ui:field=“…”一起使用,以便web设计师可以在ui字段上设置class=“xx”之类的内容。大多数GWT文档都假设您有一个按钮,而不是ButtonElement。但是如果我使用一个按钮,我需要在HTML文档中有一个
,这意味着我的网页设计师不能设置类?我的意思是UiBinder的重点是允许一个人使用普通HTML并将其与GWT代码集成

当我执行上述操作时,在换行符上,我在开发模式下从以下位置获得一个NullPointerException:

public static Button wrap(com.google.gwt.dom.client.Element element) {
    // Assert that the element is attached.
    assert Document.get().getBody().isOrHasChild(element);
在生产模式下,它似乎工作正常。在Eclipse开发模式的调试器中,当我右键单击并“检查”表达式“Document.get().getBody()”时,Eclipse说“无法向非类类型的对象发送静态消息”


我该怎么办?发生空指针异常是因为我需要先附加元素吗?如果是,怎么做?(我已经在调用createAndBindUi,传递给wrap的元素是非空的)。

最后,这里是答案。我编辑了它,删除了无用的评论

如果计划使用UiBinder将组件从ui.xml连接到视图的Java代码,则不能在ui.xml中使用HTML。而不是

<button class="btn" ui:field="myButton">Save</button>
就这样

“styleName”属性足以让您的设计器钩住CSS类。你可能会感兴趣。设计师必须了解哪些组件上有哪些属性可用。使用UiBinder不像使用HTML那样严格


UiBinder不是用来编写HTML的,而是用来编写可以被GWT理解并编译成javascript的XML(这反过来会生成页面的HTML)。它不像JSP机制那样可以立即插入纯HTML


当您必须使用Java视图代码(即使用@UiField或@UiHandler注释)连接ui元素(ui.xml中的小部件或组合)时,UiBinder最有帮助。

您可以使用HTML。唯一的限制是
g:Button
必须位于类似
g:HTMLPanel
的容器中。
g:HTMLPanel
的好处在于它可以呈现HTML

请参见下面的示例:

<g:HTMLPanel>       
    <div>
    test
    </div>

    <table border="1">
    <th>
        button
    </th>
    <tr>
    <td>    
    <g:Button styleName="{style.important}" ui:field="button"/>
    </td>
    </tr>
    </table>

    <div>
    test
    </div>      
</g:HTMLPanel>

测试
按钮
测试

谢谢你的回答。唉,这不管用,如果我在HTML中有
@UiField Button
但有一个
,我会得到:类型不匹配:无法从ButtonElement转换到Button。“UiBinder不用于编写HTML,但是…”这是一个遗憾,HTML通常来自设计师,即使是在交互式应用程序中,比如可以使用GWT创建的应用程序。UiBinder的概述特别指出,“与比Java源代码更熟悉XML、HTML和CSS的UI设计人员协作更容易”;因此,我可以从设计人员那里获取HTML,将UI:field添加到适当的元素中,然后从GWT中操作它们。嗯。那肯定是一个有用的功能。ui.xml的标题是
,HTML中带有按钮的那一行只不过是我的问题。我同意。从我们的设计师的角度来看,使用JSP或Html+Javascript更容易。AddStyleName将允许您向元素添加多个类名。
<ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder' xmlns:g='urn:import:com.google.gwt.user.client.ui'>
<g:Button styleName="btn" text="Save" ui:field="myButton"/>
@UiField com.google.gwt.user.client.ui.Button myButton;

public MyScreen() {
    final HTMLPanel panel = uiBinder.createAndBindUi(this);
    initWidget(panel);
}
<g:HTMLPanel>       
    <div>
    test
    </div>

    <table border="1">
    <th>
        button
    </th>
    <tr>
    <td>    
    <g:Button styleName="{style.important}" ui:field="button"/>
    </td>
    </tr>
    </table>

    <div>
    test
    </div>      
</g:HTMLPanel>