У меня есть 3 комбинированных списка.Два из них работают отлично, но мой третий не отправляет события изменения моим слушателям, однако, если я выберу пустую строку (null select), я получу событие.У кого-нибудь была эта проблема раньше?В моем коде ниже ничего не работает - companyCombobox, а работает - personCombobox
Дополнительная информация о коде
Что касается кода, комбинированные списки зависят друг от другавыборы, если в combo1 выбрано одно значение, то некоторые заданные объекты загружаются в combo2 и combo3.Если вы начнете с выбора combo2, то combo1 и combo3 должны обновить там источники данных.SetPersonCompanyComboDataSource () вызывается каждый раз, когда происходит событие изменения.Я не включаю эту часть кода.
private void initComboBoxes() {
personCombo = getComboBox("orderwiz.orderheadstep.contactwiz.personComboBoxTitle", "orderwiz.orderheadstep.contactwiz.personComboBox");
companyCombo = getComboBox("orderwiz.orderheadstep.contactwiz.companyComboBoxTitle", "orderwiz.orderheadstep.contactwiz.companyComboBox");
contactInfoCombo = getComboBox("orderwiz.orderheadstep.contactwiz.contactInfoComboBoxTitle", "orderwiz.orderheadstep.contactwiz.contactInfoComboBox");
initRolesCombo();
setPersonCompanyComboDataSource();
}
protected ComboBox getComboBox(String title, String inputPrompt)
{
ComboBox dropDown = new ComboBox(DT.get(title));
dropDown.setFilteringMode(Filtering.FILTERINGMODE_OFF);
dropDown.setMultiSelect(false);
dropDown.setNullSelectionAllowed(true);
dropDown.setInvalidAllowed(false);
dropDown.setNewItemsAllowed(true);
dropDown.setInputPrompt(DT.get(inputPrompt));
dropDown.setItemCaptionMode(ComboBox.ITEM_CAPTION_MODE_PROPERTY);
dropDown.setItemCaptionPropertyId("myItemCaption");
dropDown.setImmediate(true);
dropDown.setWidth("100%");
return dropDown;
}
private void setPersonCompanyComboDataSource() {
if(myModel.getSelectedContactType() == TYPES.PERSON){
setSelectedPersonComboDataSource();
}else if(myModel.getSelectedContactType() == TYPES.COMPANY){
setSelectedCompanyComboDataSource();
}else{
//we reset the comboboxes if there has been a reset or no value is selected in the search
personCombo.setContainerDataSource(null);
companyCombo.setContainerDataSource(null);
}
}
/**
* Set the person combobox to hold the selected person and fills all related companies in the companyCombobox
*/
private void setSelectedPersonComboDataSource(){
BeanItemContainer<PersonWrapper> personContainer = new BeanItemContainer<PersonWrapper>(PersonWrapper.class);
personContainer.addItem(new PersonWrapper(myModel.getSelectedPerson()));
personCombo.setContainerDataSource(personContainer);
personCombo.setValue(personContainer.firstItemId());
companyCombo.setContainerDataSource(new BeanItemContainer<CompanyWrapper>(CompanyWrapper.class));
for(Company c : myModel.getCompaniesFromPerson(myModel.getSelectedPerson())){
companyCombo.addItem(new CompanyWrapper(c));
}
if(myModel.getCompaniesFromPerson(myModel.getSelectedPerson()) != null && myModel.getCompaniesFromPerson(myModel.getSelectedPerson()).size() == 1){
companyCombo.setValue(companyCombo.getItemIds().iterator().next());
}
}
/**
* Set the selected company to companyBox and fills all related persons to the personsCombobox
*/
private void setSelectedCompanyComboDataSource(){
BeanItemContainer<CompanyWrapper> companyContainer = new BeanItemContainer<CompanyWrapper>(CompanyWrapper.class);
companyContainer.addItem(new CompanyWrapper(myModel.getSelectedCompany()));
companyCombo.setContainerDataSource(companyContainer);
companyCombo.setValue(companyContainer.firstItemId());
personCombo.setContainerDataSource(new BeanItemContainer<Person>(Person.class));
for(Person p : myModel.getPersonsFromCompany(myModel.getSelectedCompany())){
personCombo.addItem(new PersonWrapper(p));
}
if(myModel.getPersonsFromCompany(myModel.getSelectedCompany()) != null && myModel.getPersonsFromCompany(myModel.getSelectedCompany()).size() == 1){
personCombo.setValue(personCombo.getItemIds().iterator().next());
}
}