Java-Vaadin:NativeSelect设置值不工作

Java-Vaadin:NativeSelect设置值不工作,java,select,vaadin,setvalue,Java,Select,Vaadin,Setvalue,我需要将一个值设置为NativeSelect,设置在我向Select字段添加项目时希望它显示的元素。 我可以假设这是我应该完成的一个很好的例子: public class TestselectUI extends UI { @Override protected void init(VaadinRequest request) { final VerticalLayout layout = new VerticalLayout(); layout.setMargin(true);

我需要将一个值设置为NativeSelect,设置在我向Select字段添加项目时希望它显示的元素。 我可以假设这是我应该完成的一个很好的例子:

public class TestselectUI extends UI {
@Override
protected void init(VaadinRequest request) {
    final VerticalLayout layout = new VerticalLayout();
    layout.setMargin(true);
    setContent(layout);

    NativeSelect sel = new NativeSelect();
    Customer c1 = new Customer("1", "Pippo");
    Customer c2 = new Customer("2", "Pluto");
    Customer c3 = new Customer("3", "Paperino");
    Customer c4 = new Customer("4", "Pantera");
    Customer c5 = new Customer("5", "Panda");

    sel.addItem(c1);
    sel.addItem(c2);
    sel.addItem(c3);
    sel.addItem(c4);
    sel.addItem(c5);

    Customer test = new Customer(c4.id, c4.name);
    sel.setValue(test);

    layout.addComponent(sel);
}

private class Customer {
    public String id;
    public String name;

    /**
     * @param id
     * @param name
     */
    public Customer(String id, String name) {
        super();
        this.id = id;
        this.name = name;
    }

    @Override
    public String toString() {
        return this.name;
    }

    @Override
    public boolean equals(final Object object) {
        // return true if it is the same instance
        if (this == object) {
            return true;
        }
        // equals takes an Object, ensure we compare apples with apples
        if (!(object instanceof Customer)) {
            return false;
        }
        final Customer other = (Customer) object;

        // implies if EITHER instance's name is null we don't consider them equal
        if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
            return false;
        }

        return true;
    }
}
}
我的问题是中的值设置不正确,结果总是为null。 有关此问题的任何提示?

在Java中,
hashCode()
equals()
必须一致:

每当a.equals(b)时,a.hashCode()必须与b.hashCode()相同

有关更多讨论和推理,请参见和

所以,在您的示例中,您需要使用名称和id(我的IDE生成了此代码)在客户上实现hashCode()

在Java中,
hashCode()
equals()
必须一致:

每当a.equals(b)时,a.hashCode()必须与b.hashCode()相同

有关更多讨论和推理,请参见和

所以,在您的示例中,您需要使用名称和id(我的IDE生成了此代码)在客户上实现hashCode()

你正式成为我的偶像!:)谢谢!你正式成为我的偶像!:)谢谢!
public class Customer {
  [...]

  @Override
  public int hashCode() {
    int result = id != null ? id.hashCode() : 0;
    result = 31 * result + (name != null ? name.hashCode() : 0);
    return result;
  }
}