Form + ComboBox + BeanItem

Hi everyone,

I’m a newbie with Vaadin and Java.

I’m making a form to edit and to create users and the problem is that a user belong to a group so when I open a popup with the edit form,
the fields are refilled except the ComboBox.

And another problem I have, when I’m inserting data to the DB(MySQL),
the autoincrement works wrong, it increments in 50 in 50
.

Any Idea?

Thanks!!

User.class

[code]
package model;

import java.io.Serializable;
import javax.persistence.*;

/**

  • The persistent class for the USERS database table.

*/
@Entity
@Table(name=“USERS”)
@NamedQuery(name=“User.findAll”, query=“SELECT u FROM User u”)
public class User implements Serializable {
private static final long serialVersionUID = 1L;

@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="ID")
private int id;

@Column(name="MAIL")
private String mail= "";

@Column(name="PASSWORD")
private String password = "";

@Column(name="PICTURE")
private String picture ="";

@Column(name="USERNAME")
private String username ="";

//bi-directional many-to-one association to Group
@ManyToOne    
@JoinColumn(name="groupId")
private Group group;

public User() {
}

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

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

public String getMail() {
    return this.mail;
}

public void setMail(String mail) {
    this.mail = mail;
}

public String getPassword() {
    return this.password;
}

public void setPassword(String password) {
    this.password = password;
}

public String getPicture() {
    return this.picture;
}

public void setPicture(String picture) {
    this.picture = picture;
}

public String getUsername() {
    return this.username;
}

public void setUsername(String username) {
    this.username = username;
}

public Group getGroup() {
    return group;
}

public void setGroup(Group group) {
    this.group = group;
}

public String toString(){                
    return this.getUsername();
}

}
[/code]Group.class

[code]
package model;

import java.io.Serializable;

import javax.persistence.*;

import java.util.List;

/**

  • The persistent class for the GROUPS database table.

*/
@Entity
@Table(name=“GROUPS”)
@NamedQueries({
@NamedQuery(name=“Group.findAll”, query=“SELECT g FROM Group g”),
@NamedQuery(name=“Group.findById”, query=“SELECT g FROM Group g WHERE g.id = :id”),
@NamedQuery(name=“Group.findByName”, query=“SELECT g FROM Group g WHERE g.name = :name”),
})
public class Group implements Serializable {
private static final long serialVersionUID = 1L;

@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private int id;

private String description;

private String name;

//bi-directional many-to-one association to User
@OneToMany(mappedBy="group")
private List<User> users;

public Group() {
}

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

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

public String getDescription() {
    return this.description;
}

public void setDescription(String description) {
    this.description = description;
}

public String getName() {
    return this.name;
}

public void setName(String name) {
    this.name = name;
}

public List<User> getUsers() {
    return this.users;
}

public void setUsers(List<User> users) {
    this.users = users;
}

public User addUser(User user) {
    getUsers().add(user);
    user.setGroup(this);

    return user;
}

public User removeUser(User user) {
    getUsers().remove(user);
    user.setGroup(null);

    return user;
}
public String toString(){
    return String.valueOf(this.getId());
}

}
[/code]main

private Component buildForm() {
            form = new GridLayout(2, 5);

            TextField id = new TextField("Id: ");
            id.setVisible(false);
            TextField username = new TextField("First name:");
            TextField password = new TextField("Password:");            
            TextField mail = new TextField("E-mail address:");
            TextField picture = new TextField("Picture:");
            
            List<Group> groups = GroupService.findAll();
            
            BeanItemContainer<Group> groupsItem = new BeanItemContainer<>(Group.class, groups);
            ComboBox group = new ComboBox("groupId", groupsItem);
            
            fieldGroup.bind(id, "id");
            fieldGroup.bind(username, "username");
            fieldGroup.bind(password, "password");            
            fieldGroup.bind(mail, "mail");
            fieldGroup.bind(picture, "picture");
            fieldGroup.bind(group, "group");            

            form.addComponent(username);
            form.addComponent(password);            
            form.addComponent(mail);
            form.addComponent(picture);
            form.addComponent(id);
            form.addComponent(group);            

            return form;
        }

private Component controls(){
...
           Button edit = new Button("Edit", new Button.ClickListener() {
                public void buttonClick(ClickEvent event) {
                    System.out.println("FormtutorialUI -> buildTableControls -> EditButton");                                    
                    editUser(gUser);
                    UI.getCurrent().addWindow(formWindow);
                }
            });
...

}

private void editUser(User user) {
            if (user == null) {
                user = new User();
            }           
            BeanItem<User> item = new BeanItem<User>(user);                       
            fieldGroup.setItemDataSource(item);           
        }

Hi again,

I have been trying more things and I found a interesting thing. I tried to print by console the value of the combobox and It seems it have the correct value but It seems it can’t set itself the value for showing it to user.