我有3個組合框。其中兩個很好,但我的第三個不發送更改事件給我的聽衆,但是,如果我選擇空行(空選擇),然後我得到的事件。有沒有人有過這個問題?在沒有工作我下面的代碼是companyCombobox和工作是personComboboxVaadin Comobox不發送changeEvent
有關代碼
關於代碼一些進一步的信息,在組合框取決於每個人的選擇,如果一個值被選中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());
}
}
我沒有看到任何worng,但錯過了很多相關的代碼。它可能在你發佈的地方。您是否嘗試過調試並查看執行流程? – fmucar 2012-01-05 13:40:17
我已經運行了一個調試器。但是,除非我做空選擇,否則不存在事件。 – Marthin 2012-01-06 11:42:32
您可能會嘗試更改vaadin jar的版本以查看是否發生了相同的事情,如果是,可能是bug – fmucar 2012-01-06 14:47:48