1

私は UiBinder を初めて使用し、FieldLabel を使用しようとしています。

この投稿を見つけました: GXT: UiBinder new instance of a Widget

開発者がそれらのマークアップを使用する場所

<form:FieldLabel text="Text">
  <form:Widget>
    <form:TextField ui:field="text"/>
  </form:Widget>
</form:FieldLabel>

まったく同じことをすると、次のエラーが発生します。

ERROR: Illegal child <form:Widget> in a text-only context. Perhaps you are trying to use unescaped HTML where text is required, as in a HasText widget?: <form:FieldLabel text='Text'> (:7)

私のバージョンの GXT (3.0.1) では、FieldLabel マークアップの非テキストのみの子を持つことが許可されていないようです。

これまでのところ、FieldLabel を含めることがわかった唯一の解決策は、使用することです

@UiField(provided = true)

UiBinder で FieldLabel を使用するより良い方法はありますか?

4

1 に答える 1

5

問題は、大文字にしないことですform:widget:

<form:FieldLabel text="Text">
  <form:widget>
    <form:TextField ui:field="text"/>
  </form:widget>
</form:FieldLabel>

UiBinder では、大文字の要素は実際の Widget サブクラスを表し、小文字の要素は通常の html dom 要素、または親ウィジェット タグの修飾子のいずれかです。親ウィジェット タグ (つまり ) と同じ名前空間のため、これは dom 要素ではないことがわかります。form:<form:FieldLabel>

仕組み:FieldLabelクラスには、表示するウィジェットを与える Java メソッドがありますsetWidget@UiChildこのメソッドは、 (そのスーパークラスで) 注釈で装飾されています。

@Override
@UiChild(limit = 1, tagname = "widget")
public void setWidget(Widget w) {
  //...

これにより、UiBinder ユーザーはタグを として参照し、widget入力した内容でそのメソッドを呼び出すことができます。

于 2013-04-16T16:23:35.173 に答える