带有可选参数的GWT UiConstructor

时间:2014-06-13 15:52:25

标签: gwt uibinder

我们有一个包含4个参数的自定义小部件。其中一个参数是可选的。 如果我们在U​​iBinder中使用小部件并省略可选字段,则会抛出错误。

例如

MyWidget(String arg1, String arg2, String arg3) {
  ...
}

如果在UiBinder文件中我写

...
<b:MyWidget arg1="sdfsd" arg2="fsdgds" arg3="ertlkj">
...

如果我写

...
<b:MyWidget arg1="sdfsd" arg2="fsdgds">
...

然后发生以下错误:

[ERROR] <MyWidget arg1="sdfsd" arg2="fsdgds"> missing required attribute(s): arg3:     <b:MyWidget arg1="sdfsd" arg2="fsdgds">

有没有办法定义可选参数?

2 个答案:

答案 0 :(得分:3)

无论好坏,不 - 这就是UiBinder的设计方式。您只能指定一个@UiConstructor,UiBinder将始终使用该构造函数。

如果可能的话,不要让它们成为构造函数参数,而是让它们成为setter。如果setArg3()属性存在,则可以选择调用arg3方法,而不是尝试在构造函数之间切换。

答案 1 :(得分:2)

我在窗口小部件中看不到任何可选参数 - 所有这些都是必需的。你可以这样做:

MyWidget(String arg1, String arg2) {
  ...
}

public void setArg3(String arg3) {
    this.arg3 = arg3;
}

或者:

MyWidget() {
}
public void setArg1(String arg1) {
    this.arg1 = arg1;
}
public void setArg2(String arg2) {
    this.arg2 = arg2;
}
public void setArg3(String arg3) {
    this.arg3 = arg3;
}

然后你的两个Ui:Binder声明都应该有效。