如何在GWT'中使用按钮;那是尤宾德吗?
在MyPanel.ui.xml中:如何在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文档都假
<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>