2013-11-07 2 views
1

Я разрабатываю приложение vaadin и теперь имею следующие проблемы. Я пытаюсь связать вложенное свойство вдоль BeanFieldGroup.Невозможно связать вложенное свойство по BeanFieldGroup

MyEntity Класс

@Entity 
public class MyEntity implements Serializable { 
private static final long serialVersionUID = 1L; 

@EmbeddedId 
private MyEntityPK id; 

//Others Property 

public MyEntityPK getId() { 
    return this.id; 
} 

public void setId(MyEntityPK id) { 
    this.id = id; 
} 


} 

MyEntityPK Класс

@Embeddable 
public class MyEntityPK implements Serializable { 


@Column(name="CD_VARIABILE") 
private String cdVariabile; 

public String getCdVariabile() { 
    return this.cdVariabile; 
} 
public void setCdVariabile(String cdVariabile) { 
    this.cdVariabile = cdVariabile; 
} 

} 

MyVaadinPanel

private BeanFieldGroup<MyEntity> binder; 
binder = new BeanFieldGroup<MyEntity>(MyEntity.class); 
binder.setItemDataSource(new BeanItem<MyEntity>(new MyEntity())); 
variabileBinder.bind(new TextField(), "id.cdVariabile"); 

Когда я пытаюсь связать свойство "id.cdVariabile" в TextFiel, я получаю следующее ошибка:

Caused by: com.vaadin.data.util.MethodProperty$MethodException 
at com.vaadin.data.util.NestedMethodProperty.getValue(NestedMethodProperty.java:205) 
at com.vaadin.data.util.TransactionalPropertyWrapper.getValue(TransactionalPropertyWrapper.java:73) 
at com.vaadin.ui.AbstractField.getDataSourceValue(AbstractField.java:299) 
at com.vaadin.ui.AbstractField.setPropertyDataSource(AbstractField.java:629) 
... 48 more 
    Caused by: java.lang.NullPointerException 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
at java.lang.reflect.Method.invoke(Unknown Source) 
at com.vaadin.data.util.NestedMethodProperty.getValue(NestedMethodProperty.java:201) 
... 51 more 

Где я ошибаюсь?

ответ

2

Похоже, что когда вы создаете свою сущность в binder.setItemDataSource(new BeanItem<MyEntity>(new MyEntity()));, ее идентификатор равен нулю, поэтому попытка перерегистрации id.cdVariabile приведет к NPE. Попробуйте добавить PK:

BeanFieldGroup<MyEntity> binder; 
    binder = new BeanFieldGroup<MyEntity>(MyEntity.class); 
    MyEntity myEntity = new MyEntity(); 
    myEntity.setId(new MyEntityPK()); 
    binder.setItemDataSource(new BeanItem<MyEntity>(myEntity)); 
    binder.bind(new TextField(), "id.cdVariabile"); 
+0

Это работает, если вложенное свойство является списком? – zygimantus

Смежные вопросы