是否有可能在GWT的java代码中获取ui:field值?

时间:2010-11-22 20:07:26

标签: gwt widget uibinder

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

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

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

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

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

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

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

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

PS:我正在使用GWT 2.1.0.RC1。

1 个答案:

答案 0 :(得分:1)

您可能知道,ui:field就在那里,因此您可以在使用UiBinder声明它后,在Java代码中与UI对象进行交互。因此,例如,如果您在UiBinder模板中添加MagicWidget,则可以编写

@UiField MagicWidget someWidget

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

为什么Widget知道它的字段名称很重要?知道这可能会更容易提供有关其他方法的建议,以实现您的目标。