是否可以从构造函数中初始化的 .ui.xml 引用字段变量?
Is it possible to reference a field variable from .ui.xml initialized in constructor?
我正在尝试通过 UiBinder/ui.xml.
将参数传递给复合的 (registrationViewer
) 构造函数
我的 View.ui.xml
看起来像这样:
...
<ui:with field='registration' type='com.example.dto.RegistrationDTO'/>
...
<composites:RegistrationViewer ui:field="registrationViewer" registration="{registration}"/>
...
我的 View.java
看起来像这样:
...
@UiField @Ignore public RegistrationDTO registration;
@UiField RegistrationViewer registrationViewer;
public View(RegistrationDTO registration) {
this.registration = registration;
initWidget(uiBinder.createAndBindUi(this));
}
我的RegistrationViewer.java
:
private final RegistrationDTO registration;
@UiConstructor
public RegistrationViewer(RegistrationDTO registration) {
this.registration = registration;
initWidget(uiBinder.createAndBindUi(this));
}
但是,registration
参数的所有字段在RegistrationViewer
构造函数中都是空的。似乎 GWT 没有选择 RegistrationDTO
的正确实例并尝试创建它的新实例。
我的问题是:我正在尝试做什么 - 这可能吗?
@UiField
有一个provided
属性,默认值为false
,意思是UiBinder会创建一个实例,赋给字段。如果您自己提供一个值,则将其设置为 true:
@UiField(provided = true) RegistrationDTO registration;
(顺便说一句,当你从构造函数中设置它时,我会尽量使字段 final
)
我正在尝试通过 UiBinder/ui.xml.
将参数传递给复合的 (registrationViewer
) 构造函数
我的 View.ui.xml
看起来像这样:
...
<ui:with field='registration' type='com.example.dto.RegistrationDTO'/>
...
<composites:RegistrationViewer ui:field="registrationViewer" registration="{registration}"/>
...
我的 View.java
看起来像这样:
...
@UiField @Ignore public RegistrationDTO registration;
@UiField RegistrationViewer registrationViewer;
public View(RegistrationDTO registration) {
this.registration = registration;
initWidget(uiBinder.createAndBindUi(this));
}
我的RegistrationViewer.java
:
private final RegistrationDTO registration;
@UiConstructor
public RegistrationViewer(RegistrationDTO registration) {
this.registration = registration;
initWidget(uiBinder.createAndBindUi(this));
}
但是,registration
参数的所有字段在RegistrationViewer
构造函数中都是空的。似乎 GWT 没有选择 RegistrationDTO
的正确实例并尝试创建它的新实例。
我的问题是:我正在尝试做什么 - 这可能吗?
@UiField
有一个provided
属性,默认值为false
,意思是UiBinder会创建一个实例,赋给字段。如果您自己提供一个值,则将其设置为 true:
@UiField(provided = true) RegistrationDTO registration;
(顺便说一句,当你从构造函数中设置它时,我会尽量使字段 final
)