如何使用 beanitemcontainer 设置 vaadin 组合框值?

How to set vaadin combobox value with beanitemcontainer?

我正在尝试设置组合框值以更新 vaadin 中的 bean 项。但是当我打开它时,组合框选择的值变为空。如何绑定值?

    BeanItemContainer<Company> itemContainer = new BeanItemContainer<Company>(Company.class);
    itemContainer.addAll(companyService.getAllCompanies());

    cbxCompanyName = new ComboBox("Company Name", itemContainer);
    cbxCompanyName.setWidth("50%");
    cbxCompanyName.setNullSelectionAllowed(false);
    cbxCompanyName.setItemCaptionMode(ItemCaptionMode.PROPERTY);
    cbxCompanyName.setImmediate(true);
    cbxCompanyName.setItemCaptionPropertyId("companyName");
    cbxCompanyName.setNewItemsAllowed(false);
    details.addComponent(cbxCompanyName);

    cbxCompanyName.setValue(admin.getCompany());

代码如下:

@Theme("mytheme")
public class MyUI extends UI {

    @Override
    protected void init(VaadinRequest vaadinRequest) {
        final VerticalLayout layout = new VerticalLayout();
        layout.setMargin(true);
        layout.setSpacing(true);
        setContent(layout);

        //cache the beans
        ArrayList<MyBean> beans = getBeans();

        BeanItemContainer container = new BeanItemContainer<>(MyBean.class, beans);

        ComboBox combo = new ComboBox("My Combo");              
        combo.setItemCaptionMode(AbstractSelect.ItemCaptionMode.PROPERTY);
        combo.setItemCaptionPropertyId("field");
        combo.setContainerDataSource(container);

        //select programmatically
        combo.select(beans.get(1));//this is the key idea! Provide the same bean from cache, for selection.

        layout.addComponent(combo);
    }

    @WebServlet(urlPatterns = "/*", name = "MyUIServlet", asyncSupported = true)
    @VaadinServletConfiguration(ui = MyUI.class, productionMode = false)
    public static class MyUIServlet extends VaadinServlet {
    }

    public class MyBean {

        private final int id;
        private final String field;

        public MyBean(int id, String field) {
            this.id = id;
            this.field = field;
        }

        public int getId() {
            return id;
        }

        public String getField() {
            return field;
        }

    }

    public ArrayList<MyBean> getBeans() {
        ArrayList<MyBean> beans = new ArrayList<>();

        MyBean bean = new MyBean(1, "Vikrant");
        beans.add(bean);

        bean = new MyBean(2, "John");
        beans.add(bean);

        bean = new MyBean(3, "Rahul");
        beans.add(bean);

        return beans;
    }

这是我的解决方案;

    cbxCompany.select(cbxCompany.getItemIds().toArray()[getCompanyIndex()]);
    /**
     *
     *
     **/
    for (int i = 0; i < cbxCompany.getItemIds().toArray().length; i++) {
                if (((Company) cbxCompany.getItemIds().toArray()[i]).getCompanyID() == admin.getCompany().getCompanyID()) {
                    return i;
                }
            }