如何使用与从Composite扩展的多个Java对象相同的UI模板(*.ui.xml文件)?
我需要构建几个页面,这些页面应该以相同的布局显示基本相同的信息,但在一个页面上,某些字段将是可编辑的,而在另一个页面上,其他字段将是可编辑的.我想在ui.xml中只指定一次布局,并在不同的*.java类中创建不同的行为.
Eclipse给我一个语法错误"缺少FirstAppUI.ui.xml"
Run Code Online (Sandbox Code Playgroud)@UiTemplate("Template.ui.xml") public class FirstAppUI extends Composite { interface FirstAppUIUiBinder extends UiBinder<Widget, FirstAppUI> { } }
谢谢!简·普鲁萨科娃
我已经看到了这个答案,但我无法看到自己的代码中可能出现的问题.这是我的uibinding 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' xmlns:a='urn:import:com.google.gwt.app.client'>
<ui:style field='iphone' src='Render.css' />
<div id='iHeader'>
<div
style='display:block; opacity:1; -webkit-tranform:translate3d(0px, 0px, 0px);'>
<a>
<span id='waHeadTitle'
style='display:block; -webkit-tranform:translate3d(0px, 0px, 0px);'>
<g:HTML ui:field="title" />
</span>
</a>
</div>
</div>
</ui:UiBinder>
Run Code Online (Sandbox Code Playgroud)
然后我收到错误消息:在HTML上下文元素中找到小部件 <g:HTML ui:field='title'>
我想在两个标签的标签面板主体内放一些锚点.但我的锚点不可见.代码如下
<g:TabLayoutPanel ui:field="lhsTabPanel" barUnit="PX" barHeight="60">
<g:tab>
<g:header>Analysis</g:header>
<g:FlowPanel>
<g:Anchor ui:field='personalInformation'>Personal Information</g:Anchor>
</g:FlowPanel>
</g:tab>
<g:tab>
<g:header>Comparison</g:header>
<g:FlowPanel ui:field="comparisonContent"/>
</g:tab>
</g:TabLayoutPanel>
Run Code Online (Sandbox Code Playgroud)
个人信息选项卡不可见
使用GWT 2.1,我试图创建一个包含大量常量和常见样式的CSS文件.我想使用ui:style标签将其包含在UiBinder模板中:
<ui:UiBinder
xmlns:ui='urn:ui:com.google.gwt.uibinder'
xmlns:g='urn:import:com.google.gwt.user.client.ui'
<ui:style field="css" src="constants.css" />
</ui:UiBinder>
Run Code Online (Sandbox Code Playgroud)
我可以轻松地使用元素的样式:
<g:FlowPanel styleName="{css.panel}">...</g:FlowPanel>
Run Code Online (Sandbox Code Playgroud)
但是尝试在另一个Style块中使用常量会失败:
<ui:Style>
.templateSpecificStyle {
background-color: {css.royalBlue};
padding: 1em;
}
</ui:Style>
Run Code Online (Sandbox Code Playgroud)
奇怪的是我没有收到编译错误.创建了混淆的CSS类; 但是,内容是空的.有没有办法在另一个Style块中访问这些CSS常量?是否可以使用旧的ResourceBundle/CssResource模式?
出于测试目的,我想使用DialogBox登录我的应用程序.
这是uibinder文件:
<!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">
<ui:style>
</ui:style>
<g:HTMLPanel>
<g:Label>Username</g:Label>
<g:TextBox ui:field="username"></g:TextBox>
<g:Label>Password</g:Label>
<g:PasswordTextBox ui:field="password"></g:PasswordTextBox>
<g:Button ui:field="login">Login</g:Button>
</g:HTMLPanel>
</ui:UiBinder>
Run Code Online (Sandbox Code Playgroud)
这是我的实现:
public class Login extends DialogBox {
private static LoginUiBinder uiBinder = GWT.create(LoginUiBinder.class);
interface LoginUiBinder extends UiBinder<Widget, Login> {}
@UiField
TextBox username;
@UiField
PasswordTextBox password;
@UiField
Button login;
public Login() {
setHTML("Login");
setWidget(uiBinder.createAndBindUi(this));
}
}
Run Code Online (Sandbox Code Playgroud)
现在我的问题是:这是正确的方法吗?文档似乎没有说明如何做这种事情......
我们有一个使用UIBinder构建的现有UI,其ui.xml文件包含以下层次结构:
<ui:UiBinder>
<div>
Multiple <span> or <a> separated by verbatim HTML (like | separators).
Run Code Online (Sandbox Code Playgroud)
我需要用列表框替换其中一个锚点.
有没有办法在不用HTMLPanel替换div并将所有锚点更改为其他内容的情况下进行此转换?
如果我尝试在那里粘贴gwt:ValueListBox或gwt:ListBox,我会收到一条错误消息,我不能将它们混合在一起.我也不能在UIBinder下有多个子节点(例如div和HTMLPanel).
如果我唯一的选择是将所有内容转换为小部件,那么适当的转换和项目是什么?
我有一个如下所示的枚举
public enum MyEnum {
A,
B;
}
Run Code Online (Sandbox Code Playgroud)
然后我有一个UiBinder文件,其中包含一个自定义组件,该组件具有setter和getter,期望上面的枚举.(我已经删除了额外的代码
<ui:UiBinder ....>
<g:HTMLPanel>
....
<myNamespace:myComponent myAttribute="" />
....
</g:HTMLPanel>
</ui:UiBinder>
Run Code Online (Sandbox Code Playgroud)
我可以引用我的枚举并以任何方式将该值放入myAttribute中吗?我想要完成的是这样的事情
<ui:UiBinder ....>
<ui:with field="myEnumField" type="com.example.MyEnum" />
<g:HTMLPanel>
....
<myNamespace:myComponent myAttribute="{myEnumField.A}" />
....
</g:HTMLPanel>
</ui:UiBinder>
Run Code Online (Sandbox Code Playgroud)
然而,似乎我不能用ui执行此操作:with.我能以任何方式做到这一点吗?
默认情况下使用GWT UIBinder时,会在同一目录下创建一对java源和UI模板文件.
将它们保存在不同的目录中需要什么.例如client/MyApp.java和client/ui/xml/MyApp.ui.xml?
@编辑
下面是基于@jonasr答案的,但注释应该使用file pathUI模板而不是包前缀进行评估.
@UiTemplate("ui/xml/MyApp.ui.xml")
interface MyAppUiBinder extends UiBinder<Widget, MyApp>
{}
Run Code Online (Sandbox Code Playgroud) 如何在GWT中定义UiBinder中的TabPanel.TabPanel和TabLayoutPanel之间有什么区别.在哪里可以找到有关TabPanel uibinder参数的其他信息.
我必须textField使用以下规则检查一些:
if (the value A != the value B) {
this.A.forceInvalid("");
}
Run Code Online (Sandbox Code Playgroud)
这项工作真的很好,但我想在文本字段中删除错误的"信息泡沫".我试图简单地在它周围放一个带红色边框的CSS,但似乎我的上级不想要那个.
我怎么能擦掉那个泡泡?