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

是否可以在GWT中的java代码中获取ui:field值?,gwt,widget,uibinder,Gwt,Widget,Uibinder,这听起来可能很奇怪,但让我们从一个例子开始: <my:MagicWidget ui:field="someFieldName" fieldName="someFieldName"/> 但我希望,如果可能的话,允许这个构造函数是可选的,并提供一个默认构造函数,它将“神奇地”找到它的ui:field值: @UiConstructor public MagicWidget() { this.fieldName = /*some magic to get ui:field's va

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

<my:MagicWidget ui:field="someFieldName" fieldName="someFieldName"/>
但我希望,如果可能的话,允许这个构造函数是可选的,并提供一个默认构造函数,它将“神奇地”找到它的ui:field值:

@UiConstructor
public MagicWidget() {
    this.fieldName = /*some magic to get ui:field's value*/;
}
我想知道是否有办法在我的MagickWidget中获取“ui:field”的值?(小部件扩展了组合)。我担心这可能是不可能的,因为大多数时候它不是那么有用,但如果有人有想法,请随意分享


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

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

@UiField MagicWidget someWidget

以便能够通过编程与之交互。让您的magic小部件知道指向它的引用的名称可能没有多大帮助(或可能),因为您可以在应用程序的不同部分之间来回传递对特定MagicWidget的引用。一个MagicWidget可以很容易地同时指向多个具有不同名称的引用。这就是为什么在运行时很难“通过魔法”将其识别出来。我意识到,如果您仅在构建对象时需要此值,那么这并不是什么大问题,但请记住,在使用UiBinder添加小部件时,不需要包含ui:字段


为什么小部件知道其字段名很重要?知道了这一点,你就可以更容易地提出其他方法的建议,来完成你想做的事情

您可能知道,ui:字段就在那里,这样您就可以在使用UiBinder声明ui对象之后,在Java代码中与它交互。例如,如果在UiBinder模板中添加MagicWidget,则可以编写

@UiField MagicWidget someWidget

以便能够通过编程与之交互。让您的magic小部件知道指向它的引用的名称可能没有多大帮助(或可能),因为您可以在应用程序的不同部分之间来回传递对特定MagicWidget的引用。一个MagicWidget可以很容易地同时指向多个具有不同名称的引用。这就是为什么在运行时很难“通过魔法”将其识别出来。我意识到,如果您仅在构建对象时需要此值,那么这并不是什么大问题,但请记住,在使用UiBinder添加小部件时,不需要包含ui:字段


为什么小部件知道其字段名很重要?知道了这一点,你就可以更容易地提出其他方法的建议,来完成你想做的事情

你能告诉我们你想要实现什么吗?正如@RPeden所说,
ui:field
属性通过用
@UiField
注释字段来访问
MagicWidget
类中的小部件。您能告诉我们您想要实现什么吗?正如@RPeden所说,
ui:field
属性通过用
@UiField
注释字段来访问
MagicWidget
类中的小部件。我想解决的问题是从uiBinder XML文件中删除重复项。因为我们有很多字段,其中我们在两个参数中声明了相同的名称,一个用于视图恰当地绑定id,另一个用于小部件的构造,如上图所示-您可以想到一个“表单”,但是这些字段做了一些奇特的事情(这就是MagicWidget(当然名称是在这里组成的;-))。但是在一些黑客攻击之后,事实证明,要避免这种重复是不可能的——并不是说这是一个很大的问题,我只是在四处黑客攻击……:-)无论如何,谢谢你的回复!没有
@UiBinder
注释。也许应该是
@UiField
?我确实是这么做的,布拉德。我已经改正了错误。尽管这是一篇老文章,但它可能对某些人仍然有用。我想解决的问题是从uiBinder XML文件中删除重复内容。因为我们有很多字段,其中我们在两个参数中声明了相同的名称,一个用于视图恰当地绑定id,另一个用于小部件的构造,如上图所示-您可以想到一个“表单”,但是这些字段做了一些奇特的事情(这就是MagicWidget(当然名称是在这里组成的;-))。但是在一些黑客攻击之后,事实证明,要避免这种重复是不可能的——并不是说这是一个很大的问题,我只是在四处黑客攻击……:-)无论如何,谢谢你的回复!没有
@UiBinder
注释。也许应该是
@UiField
?我确实是这么做的,布拉德。我已经改正了错误。尽管这是一篇老文章,但它可能对某些人仍然有用。
@UiConstructor
public MagicWidget() {
    this.fieldName = /*some magic to get ui:field's value*/;
}