【问题标题】:GWT UiConstructor with optional parameters带有可选参数的 GWT UiConstructor
【发布时间】:2014-06-13 15:52:25
【问题描述】:

我们有一个带有 4 个参数的自定义小部件。这些参数之一是可选的。 如果我们在 UiBinder 中使用小部件并省略可选字段,则会引发错误。

例如

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">

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

【问题讨论】:

    标签: gwt uibinder


    【解决方案1】:

    无论好坏,不——这就是 UiBinder 的设计方式。你只能指定一个@UiConstructor,UiBinder 会一直使用那个构造函数。

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

    【讨论】:

      【解决方案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 声明应该可以工作。

      【讨论】:

      • 如果可能,我会用var-args 测试它。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-02-28
      • 2016-10-17
      • 1970-01-01
      • 2021-10-18
      • 1970-01-01
      • 1970-01-01
      • 2012-07-16
      相关资源
      最近更新 更多