I have a small problem selecting the displayed value of a comboBox when i make a form.
The problem is , I am making a user form that should display his information.
I get the basic info from the BeanItem, but i can’t seem to get the comboBox to display the users Country’s name, it just displays a blank field on startup, but i want the users country to be visible and shown in the combo box.
The Country is selected ok in the comboBox it just doesnt display at all.
I have some code here that should help with the explanation :
I am filling up my ComboBox with the current code :
the tutorEdited variable is the current Person object that had been selected for editing
private ComboBox getCountryList() {
container = new IndexedContainer();
container.addContainerProperty("id", Long.class, null);
container.addContainerProperty("countryname", String.class, null);
countries.setContainerDataSource(container);
countries.setInvalidAllowed(false);
countries.setNullSelectionAllowed(false);
countries.setNewItemsAllowed(false);
countries.setItemCaptionPropertyId("countryname");
List<Country> countryList = FacadeFactory.getFacade().list(
Country.class);
for (Country country : countryList) {
Item item = container.addItem(country);
item.getItemProperty("id").setValue(country.getId());
item.getItemProperty("countryname").setValue(
country.getCountryname());
}
if (tutorEdited != null) {
// I want to select and display the value from the comboBox that equals the users Country that is stored in the DB
// The code below doesn't work
countries.select(tutorEdited.getCountry().getCountryname());
}
return countries;
}
I would appreciate any kind of help regarding this, since i’ve ran out of ideas.
Hello,
I quickly scanned your code and i think there is some trouble with the container, item object and item ids as they’ve been used…
I would simply write the following
List<Country> countryList = FacadeFactory.getFacade().list(Country.class);
for (Country country : countryList) {
countries.addItem(country);
}
.....
countries.select(tutorEdited.getCountry()); //or countries.setValue(tutorEdited.getCountry());
no containers, no item objects etc just modify the Country.class toString() to view the country name otherwise play with the methods setItemCaptionMode and setItemCaptionPropertyId of the combobox
Wow, many thanks for the fast reply.
Much appreciated
The thing is, the code that i put up there works perfectly fine for me, it does exactly what i want it to do.
It shows all the Countries in the database, has the countrynames as the property that is shown when the user clicks on the comboBox,
and i can simply save the newly selected Country in the database using the following code :
If you use Country instances as item ids (and might have more than one instance of a Country during the lifetime of the application), they must implement correct equals() and hashCode() methods.
So that means i actually have to do something similar to what another forum user posted in
here .
I had hoped it wouldn’t come to this, since being a beginner in Vaadin i can’t seem to find heads or tails in that post.
I can’t seem to figure out where he had overriden the methods hashCode() and equals().
Here is the aforementioned given solution from the post.