Vaadin addColumn, методы addRow для Grid не работают

Итак, я нашел пример очень простого приложения Vaadin, которое загружает данные из MySQL, однако по какой-то причине я не могу отобразить данные в сетке, потому что я получаю ошибку для методов addColumn, addRow.

"Метод addColumn в типе Grid не применим для аргументов" и "метод addRow не определен для типа Grid" (также то же самое для getContainerDataSource().

Вот так выглядит класс MyUI:

package com.example.app;

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.Grid;
import com.vaadin.ui.HorizontalLayout;
import com.vaadin.ui.Label;
import com.vaadin.ui.TextField;
import com.vaadin.ui.UI;
import com.vaadin.ui.VerticalLayout;
import com.example.bean.Car;
import com.example.service.ReadCars;
import java.util.List;


@Theme("mytheme")
public class MyUI extends UI {

    @Override
    protected void init(VaadinRequest vaadinRequest) {

        VerticalLayout vbox = new VerticalLayout();

        HorizontalLayout hbox = new HorizontalLayout();

        Grid grid = new Grid();

        grid.addColumn("Id", Long.class);
        grid.addColumn("Name", String.class);
        grid.addColumn("Price", Integer.class);

        Button loadButton = new Button("Load data");
        loadButton.addClickListener(e -> {

            grid.getContainerDataSource().removeAllItems();

            List<Car> cars = ReadCars.read();

            for (Car car : cars) {

                grid.addRow(car.getId(), car.getName(), car.getPrice());
            }
        });

        Button clearButton = new Button("Clear data");
        clearButton.addClickListener(e -> {
            grid.getContainerDataSource().removeAllItems();
        });

        vbox.addComponents(grid);
        hbox.addComponents(loadButton, clearButton);
        hbox.setSpacing(true);
        vbox.addComponent(hbox);
        vbox.setMargin(true);
        vbox.setSpacing(true);

        setContent(vbox);
    }

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

Это бин, имеющий атрибуты полей в таблице базы данных.

package com.example.bean;

public class Car {

    private Long id;
    private String name;
    private int price;

    public Long getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

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

    public int getPrice() {
        return price;
    }

    public void setPrice(int price) {
        this.price = price;
    }
}

также в классе соединения есть создание Списка для чтения всех данных из базы данных. Вот как выглядит класс:

package com.example.service;

import com.example.bean.Car;
import java.sql.SQLException;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.datasource.SimpleDriverDataSource;


public class ReadCars {

        public static List<Car> read()  {

            String url = "jdbc:mysql://localhost/vad?useSSL=true";

            SimpleDriverDataSource ds = new SimpleDriverDataSource();

            try {
                ds.setDriver(new com.mysql.jdbc.Driver());
            } catch (SQLException ex) {
                Logger.getLogger(ReadCars.class.getName()).log(Level.SEVERE, null, ex);
            }

            ds.setUsername("root");
            ds.setPassword("root");
            ds.setUrl(url);

            String sql = "SELECT * FROM Cars";

            JdbcTemplate jdbcTemplate = new JdbcTemplate(ds);
            List<Car> cars = jdbcTemplate.query(sql, new BeanPropertyRowMapper(Car.class));

            return cars;
        }
    }

Поэтому я считаю, что приложение должно работать, но единственная проблема с сеткой. Как я могу на самом деле это исправить. Я на самом деле пытался сделать необработанные примеры из учебных пособий по vaadin с помощью Grid, и то же самое происходит даже с самой простой Grid, которая имеет только статические данные. Всегда одни и те же ошибки с этими методами.

0 ответов

Другие вопросы по тегам