2017-07-06 2 views
0

J'ai commencé récemment à utiliser le framework vaadin.Comment lier checkBox à une propriété booléenne?

J'ai un formulaire qui contient des textFields et une case à cocher, mon problème est que tous les champs sont obligatoires avec leurs propriétés attendez-vous à cocher la case ??.

C'est la forme:

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

Ceci est Ma classe Contact:

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

Qu'est-ce que je fais mal? Dois-je lier le champ de case à cocher manuellement?

+0

Pour ce qui est comme je sais 'Une case à cocher avec l'état par défaut (non vérifié, false) .' – soorapadman

+0

Recevez-vous des questions? – soorapadman

+0

ouais, Quand je coche la case et enregistre le formulaire rien ne se passe –

Répondre

1

La solution est d'ajouter addValueChangeListener à la case à cocher comme ceci:

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

Vous pouvez obtenir la valeur check box valeur onlistenter et définir explicitement l'objet.

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

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

Pour en savoir plus sur l'enregistrement des cases à cocher cette link

+0

J'utilise vaddin 7, ce code ne fonctionne que sur vaadin 6, de toute façon il m'aide merci pour votre aide :) –

+0

ok je vais mettre à jour ma réponse et upvote le vôtre aussi. – soorapadman

1

Je pense que vous devez utiliser les formFieldBindings vous BeanFieldGroup » J'ai créé. Donc, changer cette ligne

formFieldBindings = BeanFieldGroup.bindFieldsBuffered(contact, this); 

à

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

J'ai essayé votre solution mais ne fonctionne pas, la case à cocher n'est toujours pas obligatoire. Mais si j'y ajoute un écouteur cela fonctionne. –

+0

Il peut être intéressant de changer votre bean pour utiliser le booléen primitif. C'est peut-être pourquoi ce n'est pas correct. –

+0

Le problème vient du composant CheckBox, j'ai déjà utilisé des booléens primitifs mais en vain. –