在GWT中,如何在.ui.xml文件中使用自定义窗口小部件标记,该文件包含和不包含同一文件中标记的参数

时间:2013-07-19 08:59:49

标签: gwt uibinder custom-widgets

我正在创建一个自定义小部件,在UiBinder中说“CustomWid”。 在CustomWid.java文件中,我正在编写两个构造函数     一个零args像 CustomWid(){....}

 another with some args like 

CustomWid(String a,String b){......} 所以,现在我在另一个.ui.xml文件中使用我的自定义小部件,在.ui.xml文件中    当我们给予它时工作正常     仅<my:CustomWid/>,    当我们给予喜欢时也很好  仅<my:CustomWid a="srt1" b="str2"/> 但是“我的问题”是每当我试图将两个标签都放在一个.ui.xml中时 <my:CustomWid/> <my:CustomWid a="str1" b="str2"/>    现在,当我在单个.ui.xml中使用两种类型的标记时,它会抛出错误 我的意思是如何使用我的自定义小部件标签像prdefined标签? 我正在使用@uiConstructor,但它显示错误 请开发者......我需要尽早回答

3 个答案:

答案 0 :(得分:4)

UiBinder只会为给定的小部件使用单个构造函数:无论是零参数构造函数还是@UiConstructor(我很惊讶您说使用其中一个或另一个< em> call 但不是两者:一个人在每种情况下都应该失败,一个人应该在每种情况下都成功;如果你还没有用@UiConstructor注释一个构造函数,那么<my:CustomWid/>应该总是工作,<my:CustomWid a="str1" b="str2"/>应该总是失败)

这里有两种解决方案:

  • ab属性(void setA(String a)void setB(String b))使用setter,并可能稍后检查(例如,在onLoad或{{ 1}})你既没有A又没有B,但没有A和B(如果这是你的规则)。
  • 当您需要使用其他构造函数时使用onAttach(如果您选择让UiBinder使用零参数构造函数-ie no @UiField(provided = true) - 那么这意味着您必须将@UiConstructor从XML移动到Java代码:a="str1" b="str2")。

第一个选项有我的偏好。

答案 1 :(得分:0)

实际上是什么东西,并且将使用相同的对象(不完全是对象)返回,以便你不能返回相同的构造函数,所以如果你想要只是在你使用的另一个构造函数之前使用@UiConstructor标记定义xml元素属性值。如果有任何疑问通过@UiConstructor

,它将起作用

答案 2 :(得分:0)

它不会显示任何错误......'

  @UiConstructor
  public Component(String displayText,String heading)
      {
 initWidget(uiBinder.createAndBindUi(this));

  this.displayText.setText(displayText);
    this.heading.setText(heading);  
    }`

现在使用另一个带默认参数的构造函数也可以 public Component() { initWidget(uiBinder.createAndBindUi(this)); }
         现在如果添加xml参数组件而没有参数也可以在同一页面中工作。