【问题标题】:Is it possible to get the ui:field value in java code in GWT?是否可以在 GWT 的 java 代码中获取 ui:field 值?
【发布时间】:2010-11-22 20:07:25
【问题描述】:

这听起来可能很奇怪,但让我们从一个例子开始:

<my:MagicWidget ui:field="someFieldName" fieldName="someFieldName"/>

可以肯定的是,我们总是希望在 ui:field 和 fieldName 中具有相同的值。显然这段代码中有一些重复,我想避免它并使 fieldName 可选。

所以,这就是我在小部件代码中的内容:

@UiConstructor
public MagicWidget(String fieldName) {
    this.fieldName = fieldName;
}

但我想,如果可能的话,允许这个构造函数是可选的,并提供一个默认构造函数,它会“通过魔法”找出它的 ui:field 值:

@UiConstructor
public MagicWidget() {
    this.fieldName = /*some magic to get ui:field's value*/;
}

我想知道是否有办法在我的 MagickWidget 中获取“ui:field”的值? (小部件扩展了 Composite)。我担心这可能是不可能的,因为大多数时候它不是那么有用,但如果有人有想法 - 请随时分享!

PS:我使用的是 GWT 2.1.0.RC1。

【问题讨论】:

  • 您能告诉我们您想要达到的目标吗?正如@RPeden 所说,ui:field 属性用于通过使用@UiField 注释字段来访问MagicWidget 类中的小部件。

标签: gwt widget uibinder


【解决方案1】:

您可能知道,ui:field 在那里,因此您可以在使用 UiBinder 声明 UI 对象后与 Java 代码中的 UI 对象进行交互。所以举个例子,如果你在 UiBinder 模板中添加一个 MagicWidget,你可以写

@UiField MagicWidget someWidget

为了能够以编程方式与之交互。让您的魔术小部件知道指向它的引用的名称可能不是那么有帮助(或可能),因为您可以在应用程序的不同部分之间来回传递对该特定 MagicWidget 的引用。单个 MagicWidget 可以很容易地同时拥有多个不同名称的引用。这就是为什么在运行时很难“通过魔法”挑选出来的原因。我意识到如果您只在构造对象时需要此值,这不是什么大问题,但请记住,当您使用 UiBinder 添加小部件时,您不需要包含 ui:field。

为什么 Widget 知道其字段名称很重要?知道这一点可能会更容易提供有关其他方法来完成您想要做的事情的建议。

【讨论】:

  • 我想解决的只是从 uiBinder XML 文件中删除重复项。因为我们有很多字段,我们在两个参数中声明了相同的名称,一次用于正确绑定 id 的视图,一次用于构建小部件,如上所示 - 您可以想到一个“表单”,但是字段做一些花哨的事情(那就是 MagicWidget(当然名称是在这里组成的 ;-))。但经过一些黑客攻击后,事实证明,避免这种重复是完全不可能的——并不是说这有什么大问题,我只是在胡闹...... :-) 无论如何,感谢您的回复!
  • 没有@UiBinder 注释。也许应该是@UiField
  • 我确实做到了,布拉德。我已经纠正了错误。尽管这是一篇旧帖子,但它可能对某些人仍然有用。
猜你喜欢
  • 1970-01-01
  • 2011-07-10
  • 2015-02-07
  • 1970-01-01
  • 2011-03-29
  • 2022-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多