我需要为NativeSelect设置一个值,设置我希望它在我添加项目到选择字段后显示的元素。 我可以假设这是我应该完成的一个很好的例子:
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。 有关此问题的任何提示吗?
答案 0 :(得分:1)
在Java中,hashCode()
和equals()
必须保持一致:
每当a.equals(b),a.hashCode()必须与b.hashCode()相同。
有关更多讨论和推理,请参阅javadoc for Object#equals(Object)和this StackOverflow question。
因此,在您的示例中,您需要使用name和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;
}
}