Java-Vaadin : NativeSelect setValue not working

标签 java select vaadin setvalue

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

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;
    }
}
}

我的问题是值设置不正确并且结果总是为空。 对于这个问题有什么建议吗?

最佳答案

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

Whenever a.equals(b), then a.hashCode() must be same as b.hashCode().

请参阅javadoc for Object#equals(Object)this StackOverflow question进行更多讨论和推理。

因此,在您的示例中,您需要使用名称和 id 对 Customer 实现 hashCode()(我的 IDE 生成了此代码)。

public class Customer {
  [...]

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

关于Java-Vaadin : NativeSelect setValue not working,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17298314/

相关文章:

java - 我可以在另一个类中使用一个类的代码(构造函数+方法)吗? (java)

java - 将 JFrame 加载到 html 中

用于检索不相关记录的元组的 SQL

java - Vaadin7 如何从服务器下载文件?

extjs - 比较企业应用程序的 Web GUI 框架

java - 如何拦截自己创建的JdbcTemplate实例

java - 非法状态异常 : finishBroadcast() called outside of a broadcast

mysql - 如何将一行分配到不同的行中,并按其具有的值和创建日期分组?

mysql - 使用更大的数据库优化 MySQL 查询

java - Vaadin 更改文本字段标签颜色