2017-07-06 77 views
0

我最近开始使用vaadin框架。如何将checkBox绑定到布尔属性?

我有一个表单,其中包含一些textFields和一个复选框,我的问题是所有的字段都与它们的属性绑定在一起期望checkbox ??。

这是形式:

public class ContactForm extends FormLayout { 

private Button save = new Button("Save", this::save); 
private Button delete = new Button("Delete", this::delete); 
private Button cancel = new Button("Cancel", this::cancel); 
private TextField firstName = new TextField("First name"); 
private TextField lastName = new TextField("Last name"); 
private TextField phone = new TextField("Phone"); 
private TextField email = new TextField("Email"); 
private DateField birthDate = new DateField("Birth date"); 
private CheckBox bookMarks = new CheckBox("BookMarks"); 

private Contact contact; 

// Easily bind forms to beans and manage validation and buffering 
private BeanFieldGroup<Contact> formFieldBindings; 

public ContactForm() { 
    configureComponents(); 
    buildLayout(); 
} 

private void configureComponents() {...} 

private void buildLayout() {...} 



void edit(Contact contact) { 

    this.contact = contact; 
    if (contact != null) { 
     // Bind the properties of the contact POJO to fields in this form 
     formFieldBindings = BeanFieldGroup.bindFieldsBuffered(contact, this); 

     delete.setVisible(contact.getId() != null); 
    } 

    setVisible(contact != null); 
} 

@Override 
public AddressbookUI getUI() { 
    return (AddressbookUI) super.getUI(); 
}} 

这是我的类联系人:

public class Contact implements Serializable, Cloneable { 

private Long id; 

private String firstName = ""; 
private String lastName = ""; 
private String phone = ""; 
private String email = ""; 
private Date birthDate; 
private Boolean bookMarks; 

// getters and setters 
... 
} 

我到底做错了什么?我应该手动绑定复选框字段吗?

+0

至于我所知'默认状态的复选框(未选中,FALSE).' – soorapadman

+0

,能得到任何问题? – soorapadman

+0

是的,当我检查复选框并保存表单时什么也没有发生 –

回答

1

的解决方案是增加addValueChangeListener的复选框这样的:

bookMarks.addValueChangeListener(event -> contact.setBookMarks(bookMarks.getValue())); 
1

您可以获得值check boxonlistenter并明确设置对象。

bookMarks.addListener(new ValueChangeListener() { 
    public void valueChange(ValueChangeEvent event) { 

     contact.setBookMarks(checkbox1.getValue()); 
    } 
}); 

更多地了解复选框选中此link

+0

我使用vaddin 7,这个代码只适用于vaadin 6,无论如何它可以帮助我感谢你的帮助:) –

+0

好吧,我会更新我的答案,并upvote你也是。 – soorapadman

1

我认为你需要使用formFieldBindings BeanFieldGroup你”已创建。因此,改变这一行

formFieldBindings = BeanFieldGroup.bindFieldsBuffered(contact, this); 

formFieldBindings = new BeanFieldGroup<Contact>(Contact.class); 
formFieldBindings.setItemDataSource(contact); 
formFieldBindings.buildAndBindMemberFields(this); 
+0

我试过你的解决方案,但不工作复选框仍然没有约束力。但是,如果我添加一个侦听器,它就可以工作。 –

+0

可能有必要将bean更改为使用原始布尔值。这可能是它没有正确绑定的原因。 –

+0

问题来自CheckBox组件,我已经使用原始布尔值但徒劳无功。 –

相关问题