我正在使用双下拉列表(NativeSelect
)构建表单,第二个NativeSelect
依赖于第一个NativeSelect
。就像选择一个州时一样,' ZIP'显示其包含的邮政编码。
我搜索但找不到这样的例子。这是我的屏幕,它不起作用。当用户选择第一个NativeSelect
时,第二个NativeSelect
似乎发生了变化,但我无法下拉第二个NativeSelect
。
这是初始状态。
当用户选择' company1'来自'公司'下拉
'条目'选择已更改
但是我不能放下它。
这是我的代码:
public SampleForm(Supplier<List<Company>> companySupplier , EntryDao entryDao) {
this.companySupplier = companySupplier;
this.entryDao = entryDao;
setCompanySupplier(companySupplier);
}
public void setCompanySupplier(Supplier<List<Company>> companySupplier ) {
this.companySupplier = companySupplier;
companySupplier.get().forEach(company -> {
companySelect.addItem(company);
companySelect.setItemCaption(company, "[" + company.getId() + "] " + company.getName());
});
companySelect.setNullSelectionAllowed(false);
companySelect.setMultiSelect(false);
companySelect.addValueChangeListener(event -> {
Company company = (Company) event.getProperty().getValue();
logger.info("loading entries from company : {} " , company);
setEntryList(entryDao.findByCompany(company));
});
}
public void setEntryList(List<Entry> entryList) {
entrySelect.removeAllItems();
logger.info("entryList size = {}" , entryList.size());
entryList.forEach(entry -> {
entrySelect.addItem(entry);
entrySelect.setItemCaption(entry , entry.toString());
});
entrySelect.setImmediate(true);
entrySelect.setNullSelectionAllowed(false);
entrySelect.setMultiSelect(false);
entrySelect.setEnabled(true);
}
@Override
protected Component createContent() {
return new MVerticalLayout(
new MFormLayout(companySelect , entrySelect , enabled)
.withMargin(false) , getToolbar()
).withMargin(new MMarginInfo(false , true));
}
我的算法很简单:当用户点击companySelect
时,addValueChangeListener
将加载相关条目(属于公司),并设置为entrySelect
。
但我不知道为什么它不起作用。
我错过了什么吗?谢谢。