後でフォームを表示する前に値をプッシュするために、エディターはウィジェットを実際に使用するためにウィジェットへの参照を持っている必要があります。あなたが求めているのは、編集者shanonEditor
がnullに気付くことができ、後で(いつ?割り当てたとき?フォームが表示されたとき?)もう一度チェックして、サブ値の受け渡しを再試行することです。これは意味がなく、編集者がどのように機能するかということでもありません。
代わりに、このフィールドに事前入力することを検討してください。つまり、怠惰にしないでください。現在、怠惰にすることでどれだけの利益を得ていますか?これらすべての構築を延期するために、この怠惰にしていcreateAndBind
ますか?エディターだけを積極的に作成し、asWidget / createAndBindまでパネルなどをオフのままにしておくことはできますか?
IsWidget
そうだとすると、直接実装するか拡張するかのどちらかLazyPanel
であり、それらのサブエディターを描画することをほぼ確実に望んでいると仮定します(まだ、つまり、決して望まないのではなく、1、2秒待ちます)。リーフ値エディター(フィールドなど)とサブエディター(サブパネル)を作成しますが、各ステップで、実際に必要になるまで、これらの構成パーツをパネルに実際に組み立てるのを延期します。これには、呼び出す必要がある@UiField(provided=true)
前にこれらのフィールドに値が入力されていることを示すことが含まれる可能性があります。createAndBind
public class CompanyEditor implements Editor<Company>, IsWidget {
interface Binder extends UiBinder<Widget, CompanyEditor> {}
private static final Binder binder = GWT.create(Binder.class);
@UiField(provided = true)
TextBox name = new TextBox();
@UiField(provided = true)
PersonEditor owner = new PersonEditor();
private Widget root;
@Override
public Widget asWidget() {
if (root == null) {
root = binder.createAndBind(this);
}
return root;
}
}
public class PersonEditor implements Editor<Person>, IsWidget {
interface Binder extends UiBinder<Widget, CompanyEditor> {}
private static final Binder binder = GWT.create(Binder.class);
@UiField(provided = true)
TextBox firstName = new TextBox();
@UiField(provided = true)
TextBox lastName = new TextBox();
@UiField(provided = true)
@Path("address.city")
TextBox city = new TextBox();
private Widget root;
@Override
public Widget asWidget() {
if (root == null) {
root = binder.createAndBind(this);
}
return root;
}
}