2013-06-25 2 views
1

Мне нужно установить значение в NativeSelect, установив элемент, который я хочу, он показывает после i, в то время как я добавил элементы в поле Select. я могу предположить, что это хороший пример для того, что я должен выполнить:Java - Vaadin: NativeSelect setValue не работает

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

Моя проблема заключается в том, что значение не установлено правильно и получается, всегда утратившим. Любые советы по этой проблеме?

ответ

1

В Java, hashCode() и equals() должны соответствовать:

Всякий раз, когда a.equals (б), то a.hashCode() должна быть такой же, как b.hashCode().

См. javadoc for Object#equals(Object) и this StackOverflow question для более подробного обсуждения и рассуждений.

Итак, в вашем примере вам нужно реализовать 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; 
    } 
} 
+0

Вы официально мой кумир! :) Большое спасибо! –