Vaadin 8 possible bug with Grid

Hello everyone, this is my first post, so sorry if I say something stupid.

I’m trying to display items from a list into a grid and then update them manualy
Here is my source code for UI:

package eu.cz.fit.bitjv.cv5.orm.wolfofwallstreetsemestral;

import javax.servlet.annotation.WebServlet;
import com.vaadin.annotations.Theme;
import com.vaadin.annotations.VaadinServletConfiguration;
import com.vaadin.server.VaadinRequest;
import com.vaadin.server.VaadinServlet;
import com.vaadin.ui.Button;
import com.vaadin.ui.DateField;
import com.vaadin.ui.Grid;
import com.vaadin.ui.HorizontalLayout;
import com.vaadin.ui.TextField;
import com.vaadin.ui.UI;
import com.vaadin.ui.VerticalLayout;
import eu.cz.fit.bitjv.cv5.orm.semestralwork.clients.BankeriClient;
import eu.cz.fit.bitjv.cv5.orm.semestralwork.entities.Bankeri;
import java.util.List;
import javax.ws.rs.core.GenericType;
import javax.ws.rs.core.Response;

/**
 * This UI is the application entry point. A UI may either represent a browser window 
 * (or tab) or some part of an HTML page where a Vaadin application is embedded.
 * <p>
 * The UI is initialized using {@link #init(VaadinRequest)}. This method is intended to be 
 * overridden to add component to the user interface and initialize non-component functionality.
 */
@Theme("mytheme")
public class MyUI extends UI {
    
    private BankeriClient bankeriClient = new BankeriClient();
    
    @Override
    protected void init(VaadinRequest vaadinRequest) {
        final VerticalLayout layout = new VerticalLayout();
        final HorizontalLayout buttonLayout = new HorizontalLayout();
        
        final TextField nameField = new TextField();
        final TextField surnameField = new TextField();
        final DateField dateField = new DateField();
        final TextField addressField = new TextField();
        final TextField dollarsField = new TextField();    
        
        Response response = bankeriClient.findAll_JSON(Response.class);
        List<Bankeri> listBankeri = response.readEntity(new GenericType<List<Bankeri>>() {});
        Grid<Bankeri> grid = new Grid<>();
        grid.addColumn(Bankeri::getJmeno).setCaption("First name").setEditorComponent(
                nameField,
                Bankeri::setJmeno
        );
        grid.addColumn(Bankeri::getPrijmeni).setCaption("Surname").setEditorComponent(
                surnameField,
                Bankeri::setPrijmeni
        );
        grid.addColumn(Bankeri::getLocalDatum_narozeni).setCaption("Date of birth").setEditorComponent(
                dateField,
                Bankeri::setLocalDatum_narozeni
        );
        grid.addColumn(Bankeri::getAdresa).setCaption("Address").setEditorComponent(
                addressField,
                Bankeri::setAdresa
        );
        grid.addColumn(Bankeri::getStringPenize).setCaption("Dollars").setEditorComponent(
                dollarsField,
                Bankeri::setStringPenize
        );
        grid.setData(listBankeri);
        grid.getEditor().setEnabled(true);
        grid.getEditor().setSaveCaption("Save");
        grid.getEditor().setCancelCaption("Cancel");
        
        final Button addBanker = new Button();
        addBanker.setCaption("Přidej bankéře");
        addBanker.addClickListener(e -> {
            Bankeri toAdd = new Bankeri();
            toAdd.setId(listBankeri.isEmpty() 
                    ? 1
                    : listBankeri.get(listBankeri.size() - 1).getId() + 1);
            listBankeri.add(toAdd);
            grid.getDataProvider().refreshAll();
        });
        
        final Button saveBanker = new Button();
        saveBanker.setCaption("Ulož data bankéřů");
        saveBanker.addClickListener(e -> {
            for(Bankeri banker : listBankeri) {
                bankeriClient.create_JSON(banker);
            }
        });
        
        buttonLayout.addComponents(addBanker, saveBanker);
        layout.addComponents(grid, buttonLayout);
        
        setContent(layout);
    }

    @WebServlet(urlPatterns = "/*", name = "MyUIServlet", asyncSupported = true)
    @VaadinServletConfiguration(ui = MyUI.class, productionMode = false)
    public static class MyUIServlet extends VaadinServlet {
    }
}

And here is the full class for Bankeri:

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package eu.cz.fit.bitjv.cv5.orm.semestralwork.entities;

import java.io.Serializable;
import java.time.LocalDate;
import java.util.Date;
import java.util.List;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.Transient;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlTransient;

/**
 *
 * @author jindrj14
 */
@Entity
@Table(name="Bankeri")
@XmlRootElement
public class Bankeri implements Serializable {

    private static final long serialVersionUID = 1L;
    private Integer id;
    private String jmeno;
    private String prijmeni;
    private Date datum_narozeni;
    private String adresa;
    private Integer penize;
    private List<Majetek> majetky;
    private List<Accusing> accusing;

    @JoinColumn(name="ID_ACCUSSING")
    @OneToMany(targetEntity=Accusing.class)
    @XmlTransient
    public List<Accusing> getAccusing() {
        return accusing;
    }

    public void setAccusing(List<Accusing> accusing) {
        this.accusing = accusing;
    }

    @JoinColumn(name="ID_MAJETEK")
    @OneToMany(targetEntity=Majetek.class)
    @XmlTransient
    public List<Majetek> getMajetky() {
        return majetky;
    }

    public void setMajetky(List<Majetek> majetky) {
        this.majetky = majetky;
    }
    
    @Column(name="JMENO")
    public String getJmeno() {
        return jmeno;
    }

    public void setJmeno(String jmeno) {
        this.jmeno = jmeno;
    }

    @Column(name="PRIJMENI")
    public String getPrijmeni() {
        return prijmeni;
    }

    public void setPrijmeni(String prijmeni) {
        this.prijmeni = prijmeni;
    }

    @Temporal(javax.persistence.TemporalType.DATE)
    @Column(name="DATUM_NAROZENI")
    public Date getDatum_narozeni() {
        return datum_narozeni;
    }

    public void setDatum_narozeni(Date datum_narozeni) {
        this.datum_narozeni = datum_narozeni;
    }

    @Transient
    public LocalDate getLocalDatum_narozeni() {
        return new java.sql.Date( datum_narozeni != null ? datum_narozeni.getTime() : new Date().getTime() ).toLocalDate();
    }

    public void setLocalDatum_narozeni(LocalDate datum_narozeni) {
        this.datum_narozeni = java.sql.Date.valueOf(datum_narozeni.toString());
    }
    
    @Column(name="ADRESA")
    public String getAdresa() {
        return adresa;
    }

    public void setAdresa(String adresa) {
        this.adresa = adresa;
    }

    @Column(name="PENIZE")
    public Integer getPenize() {
        return penize;
    }

    @Transient
    public String getStringPenize() {
        return this.penize == null ? "0" : this.penize.toString();
    }
    
    public void setStringPenize(String penize) {
        try {
            this.penize = Integer.parseInt(penize);            
        }
        catch(NumberFormatException e) {
            this.penize = 0;
        }
    }
    
    public void setPenize(Integer penize) {
        this.penize = penize;
    }

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name="ID_BANKERI")
    public Integer getId() {
        return id;
    }

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

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (id != null ? id.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Bankeri)) {
            return false;
        }
        Bankeri other = (Bankeri) object;
        if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "eu.cz.fit.bitjv.cv5.orm.semestralwork.entities.Bankeri[ id=" + id + " ]
";
    }
    
}

The problem I’m having is that the grid does not display any of the values - I’ve tried adding them manually (new Bankeri()) to no avail.
However, the save button actually works and does seem to detect the Bankeri present.

Can you please help me?

With regards, Jan.

Solved it! setItems instead of setData was the correct answer!