我正在编写一个带有以下标记的小部件:
<g:HTMLPanel ui:field="shortcutPanel" styleName="{style.shortcut}">
<g:Image ui:field="shortcutImage"></g:Image>
<span ui:field="shortcutLabel"></span>
</g:HTMLPanel>
Run Code Online (Sandbox Code Playgroud)
所以基本上是一个包装和图像和标签的div.现在,我不想在图像/跨度上添加事件处理程序,而是希望将onClick与HTMLPanel相关联.然而,我的问题是gwt告诉我
shortcutPanel没有关联的addClickHandler方法
所以我假设不同的是HTMLPanel没有实现HasClickHandlers或沿着那条线.我想知道将点击处理程序附加到诸如HTMLPanel之类的Ui元素的标准方法是什么,甚至更好,是否有这样的GWT Widget本质上是一个div包装器,我可以轻松地将事件附加到@UiHandler注解.
我需要在一个特定的位置插入一个[基于uiBinder的小部件]到另一个小部件.插入的小部件有一个有点复杂的布局,所以我试图用HTML定义它.
referencePanel.add(...)因java.lang.IllegalStateException而失败:此小部件的父级未实现HasWidgets.不知道哪个小部件的父级不满意 - innerPanel或referencePanel.
如果将ReferenceUI对象添加到RootPanel,然后将其添加到页面底部.但如果它首先添加到RootPanel,那么在添加到referencePanel时会出现JavaScriptException Code 3(HIERARCHY_REQUEST_ERR).
有什么建议?
public class AppUIDemo extends Composite {
@UiTemplate("AppUIDemo.ui.xml")
interface AppUIDemoUiBinder extends UiBinder<Widget, AppUIDemo> {
}
@UiTemplate("ReferenceUI.ui.xml")
interface ReferenceUIUiBinder extends
UiBinder<Widget, ReferenceUI> {
}
private static AppUIDemoUiBinder uiBinder = GWT
.create(AppUIDemoUiBinder.class);
private static ReferenceUIUiBinder refUIBinder = GWT
.create(ReferenceUIUiBinder.class);
@UiField
FlowPanel referencePanel;
public AppUIDemo() {
initWidget(uiBinder.createAndBindUi(this));
ReferenceUI reference = new ReferenceUI(refUIBinder);
HTMLPanel innerPanel = reference.getRefPanel();
innerPanel.getElement().setId(HTMLPanel.createUniqueId());
referencePanel.add(innerPanel);
}
}
Run Code Online (Sandbox Code Playgroud)
public class ReferenceUI extends Composite {
interface ReferenceUIUiBinder extends
UiBinder<Widget,ReferenceUI> {
}
private static ReferenceUIUiBinder …Run Code Online (Sandbox Code Playgroud) 可以将UiBinder与SmartGWT一起使用吗?我听说目前这是不可能的,尽管有努力缩小差距.这些努力如何?他们取得了成功吗?
此外,如果SmartGWT还不是UiBinder友好的,那么还有其他任何GWT库吗?也许是ext-GWT?
我有国际化的问题.我正在尝试在我的GWT应用程序中实现支持两种语言.不幸的是,在UiBinder的帮助下,我从来没有找到一个完整的例子.这就是我做的:
我的模块I18nexample.gwt.xml:
<?xml version="1.0" encoding="UTF-8"?>
<module rename-to='i18nexample'>
<inherits name="com.google.gwt.user.User" />
<inherits name='com.google.gwt.user.theme.clean.Clean' />
<inherits name="com.google.gwt.i18n.I18N" />
<inherits name="com.google.gwt.i18n.CldrLocales" />
<entry-point class='com.myexample.i18nexample.client.ExampleI18N' />
<servlet path="/start" class="com.myexample.i18nexample.server.StartServiceImpl" />
<extend-property name="locale" values="en, fr" />
<set-property-fallback name="locale" value="en" />
</module>
Run Code Online (Sandbox Code Playgroud)
我的界面Message.java:
package com.myexample.i18nexample.client;
import com.google.gwt.i18n.client.Constants;
public interface Message extends Constants {
String greeting();
}
Run Code Online (Sandbox Code Playgroud)
同一个包com.myexample.i18nexample.client有三个属性文件:
Message.properties:
greeting = hello
Run Code Online (Sandbox Code Playgroud)
Message_en.properties:
greeting = hello
Run Code Online (Sandbox Code Playgroud)
Message_fr.properties:
greeting = bonjour
Run Code Online (Sandbox Code Playgroud)
我的UiBinder文件Greeting.ui.xml:
<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent">
<ui:UiBinder …Run Code Online (Sandbox Code Playgroud) 在我的标记中,我想在元素之间添加一个空格( ),而不必总是使用CSS来完成.如果我把 在我的标记中,GWT会抛出错误.有办法解决吗?
例如:
<g:Label>One </g:Label><g:Label>Two</g:Label>
Run Code Online (Sandbox Code Playgroud)
应该显示:
One Two
Run Code Online (Sandbox Code Playgroud)
并不是:
OneTwo
Run Code Online (Sandbox Code Playgroud) 我需要在GWT中的UiBinder中将许多单独的CSS类应用到1个元素中,但不知道如何操作.
在我的TestView.ui.xml中,我有
<g:Button text="Log Out" ui:field="logoutButton" addStyleNames="{style.gwt-Button}" addStyleNames="{style.paddedRight}" />
Run Code Online (Sandbox Code Playgroud)
但它产生了运行时错误.
然后我试了一下
<g:Button text="Log Out" ui:field="logoutButton" addStyleNames="{style.gwt-Button style.paddedRight}" />
Run Code Online (Sandbox Code Playgroud)
这次我得到编译时错误.
那么,如何在GWT中的UiBinder中将1个元素addStyleNames"Multiple css classes"?
在互联网上找不到信息.
这是我的第一篇文章.我希望有人可以帮助我.
我正在寻找一种方法来分别在UiBinder XML布局文件中定义一个小部件,而不是布局层次结构的一部分.这是一个小例子:
<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder"
xmlns:g="urn:import:com.google.gwt.user.client.ui">
<g:Label ui:field="testlabel" text="Hallo" />
<g:HTMLPanel>
...
</g:HTMLPanel>
Run Code Online (Sandbox Code Playgroud)
编译失败,因为ui:UiBinder元素只需要一个子元素.
在Java Code中,我将照常访问和绑定Label小部件:
@UiField Label testlabel;
Run Code Online (Sandbox Code Playgroud)
例如,当您定义Grid或FlexTable时,这可能很有用 - 我想在XML布局文件中定义表头的标签,而不是在代码中以编程方式定义.
提前谢谢了
我使用混淆的风格,例如.
<ui:style>
.explanation {
text-align: center;
}
</ui:style>
...
<g:HTMLPanel>
<div class="{style.explanation}">
...
Run Code Online (Sandbox Code Playgroud)
这是不好的做法吗?
当我查看HTML时看起来没问题,或者我误解了警告..
我在GWT的开发模式中收到以下警告:
Template with variable in CSS attribute context:
The template code generator cannot guarantee HTML-safety of the template
-- please inspect manually or use SafeStyles to specify arguments in a CSS attribute context
Run Code Online (Sandbox Code Playgroud) 我正在开发一些我希望能够与UiBinder一起使用的自定义小部件.不幸的是,我继续浪费我的生命,追逐以下错误:
在urn中没有匹配"..."的类:import:...
这似乎是在类中有任何阻止GWT编译器处理它的错误时抛出的全部异常.这包括类的整个依赖关系树中的任何内容.
为了节省我自己和遇到同一问题的任何人一些时间和痛苦,让我们在这里列出一个最意想不到的,很难找到原因的列表.我将从我的最新版开始,这让我决定在这里发布.
由于VerticalPanel在标准模式下无法正常工作(http://www.gwtproject.org/doc/latest/DevGuideUiPanels.html),因此Google建议使用FlowPanel替换VerticalPanel .
myflowPanel.getElement().getStyle().setFloat(Float.NONE);
Run Code Online (Sandbox Code Playgroud)
不起作用
那么如何使FlowPanel像VerticalPanel一样垂直流动它的子节点?