我已经解决了 radio 的一个问题并得到了新的问题。 我有自己的客户 radioGroup 组件:
public class OperationDateRadioGroup extends RadioGroup<OperationDate> {
private LocalDatePicker date;
private LocalDatePicker from;
private LocalDatePicker to;
public OperationDateRadioGroup(String id, IModel<OperationDate> model) {
super(id, model);
}
@Override
protected void onInitialize() {
super.onInitialize();
operationDateType = getModelObject().getOperationDateType();
date = new LocalDatePicker("date", new CompoundPropertyModel<>(getModel()).bind("date")) {
@Override
protected void onConfigure() {
super.onConfigure();
setEnabled(OperationDateRadioGroup.this.getModelObject().getOperationDateType() == OperationDateType.DATE);
}
};
from = new LocalDatePicker("interval.from", new CompoundPropertyModel<>(getModel()).bind("interval.from")) {
@Override
protected void onConfigure() {
super.onConfigure();
setEnabled(OperationDateRadioGroup.this.getModelObject().getOperationDateType() == OperationDateType.INTERVAL);
}
};
to = new LocalDatePicker("interval.to", new CompoundPropertyModel<>(getModel()).bind("interval.to")) {
@Override
protected void onConfigure() {
super.onConfigure();
setEnabled(OperationDateRadioGroup.this.getModelObject().getOperationDateType() == OperationDateType.INTERVAL);
}
};
OperationDate operationDate = new OperationDate();
operationDate.setOperationDateType(OperationDateType.DATE);
Radio dateType = new Radio<>("dateType", Model.of(operationDate));
OperationDate operationInterval = new OperationDate();
operationInterval.setOperationDateType(OperationDateType.INTERVAL);
Radio intervalType = new Radio<>("intervalType", Model.of(operationInterval));
dateType.add(new AjaxFormSubmitBehavior("onchange") {
private static final long serialVersionUID = -6001312248222404593L;
@Override
protected void onEvent(AjaxRequestTarget ajaxRequestTarget) {
ajaxRequestTarget.add(date, from, to);
}
});
intervalType.add(new AjaxEventBehavior("onchange") {
private static final long serialVersionUID = -6001312248222404593L;
@Override
protected void onEvent(AjaxRequestTarget ajaxRequestTarget) {
ajaxRequestTarget.add(date, from, to);
}
});
add(dateType, intervalType);
add(date.setOutputMarkupId(true));
add(from.setOutputMarkupId(true));
add(to.setOutputMarkupId(true));
add(new AjaxFormChoiceComponentUpdatingBehavior() {
@Override
protected void onUpdate(AjaxRequestTarget ajaxRequestTarget) {
}
});
getForm().add(new DateIntervalFormValidator(this, date, from, to));
}
}
还有我放置 radioGroup 的 FormComponentPanel
public class OperationDatePanel extends FormComponentPanel<OperationDate> {
....
@Override
protected void onInitialize() {
super.onInitialize();
add(new OperationDateRadioGroup("operationDate", getModel()));
}
}
问题:当我在 radioGroup 中选择 radio 更改内部(radioGroup)组件和外部(Page)模型时,我只需要更改 radioGroup 模型并通过提交更改外部模型。
最佳答案
我认为,这个问题是因为您将 outer(Page)
模型传递到 OperationDateRadioGroup
构造函数
add(new OperationDateRadioGroup("operationDate", /*Here you are passing PAGE model*/ getModel()));
它适用于此页面模型
。您需要将任何其他模型传递给构造函数并使用此模型..
关于java - radio 中的 Wicket 口本地模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45712848/