Vaadin在Spring Boot中缺少一些功能

时间:2017-04-13 11:11:47

标签: java spring-boot vaadin

我刚开始学习Vaadin。我已经完成了基于这个视频系列的所有教程: https://www.youtube.com/watch?v=o93ofXBIkf8&list=PLcRrh9hGNalkIgvImLRO9u3D0YpmEWuqo 当我从Eclipse创建Vaadin 7/8项目时,我可以使用视频中使用的所有功能。 像textfield.addTextChangeListener(e-> ...) filterText.setInputPrompt("按名称过滤");

但如果我使用SPRING INITIALIZR(https://start.spring.io/),那么我就是我的UI,这些功能都缺失了。 (可能还有更多的功能缺失,我只是注意到了这些。)

这是我的spring boot app的pom.xml。

<?xml version="1.0" encoding="UTF-8"?>

http://maven.apache.org/xsd/maven-4.0.0.xsd">     4.0.0

<groupId>hu.csani</groupId>
<artifactId>vaadin-sql3</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>

<name>vaadin-sql3</name>
<description>Demo project for Spring Boot</description>

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.5.2.RELEASE</version>
    <relativePath /> <!-- lookup parent from repository -->
</parent>

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <java.version>1.8</java.version>
</properties>

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-jdbc</artifactId>
    </dependency>
    <dependency>
        <groupId>com.vaadin</groupId>
        <artifactId>vaadin-spring-boot-starter</artifactId>
    </dependency>

    <dependency>
        <groupId>org.postgresql</groupId>
        <artifactId>postgresql</artifactId>
        <scope>runtime</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>net.sf.opencsv</groupId>
        <artifactId>opencsv</artifactId>
        <version>2.3</version>
    </dependency>
</dependencies>

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>com.vaadin</groupId>
            <artifactId>vaadin-bom</artifactId>
            <version>8.0.5</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

和我的春季启动应用程序中的UI:

package hu.csani.presenter;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;

import com.vaadin.data.Binder;
import com.vaadin.server.VaadinRequest;
import com.vaadin.spring.annotation.SpringUI;
import com.vaadin.ui.Button;
import com.vaadin.ui.Grid;
import com.vaadin.ui.Notification;
import com.vaadin.ui.TextField;
import com.vaadin.ui.UI;
import com.vaadin.ui.Upload;
import com.vaadin.ui.Upload.SucceededEvent;
import com.vaadin.ui.VerticalLayout;

import hu.csani.model.Customer;
import hu.csani.service.CustomerService;

@SpringUI
public class VaadinUI extends UI implements Upload.Receiver, Upload.SucceededListener {

    @Autowired
    private CustomerService service;

    private Customer customer;
    private Binder<Customer> binder = new Binder<>(Customer.class);

    private Grid<Customer> grid = new Grid(Customer.class);

    private TextField filterText = new TextField();

    private TextField firstName = new TextField("First name");
    private TextField lastName = new TextField("Last name");
    private Button save = new Button("Save", e -> saveCustomer());

    private Upload upload;
    private File tempFile;

    @Override
    protected void init(VaadinRequest request) {
        // service.setUi(this);
        updateGrid();
        grid.setColumns("firstName", "lastName");
        grid.addSelectionListener(e -> updateForm());

        binder.bindInstanceFields(this);
        upload = new Upload("Upload it here", this);
        upload.addSucceededListener(this);
        upload.setImmediateMode(false);


//      filterText.p("filter by name");
        filterText.addValueChangeListener(e->{
            updateGrid();
        });

        VerticalLayout layout = new VerticalLayout(upload, filterText, grid, firstName, lastName, save);
        layout.setMargin(true);
        layout.setSpacing(true);
        setContent(layout);
    }

//  private void updateGrid(String filter) {
//      List<Customer> customers = service.findAll(filter);
//      grid.setItems(customers);
//      setFormVisible(false);
//  }

    private void updateGrid() {
        List<Customer> customers = service.findAll(filterText.getValue());
        grid.setItems(customers);
        setFormVisible(false);
    }

    private void updateForm() {
        if (grid.asSingleSelect().isEmpty()) {
            setFormVisible(false);
        } else {
            customer = grid.asSingleSelect().getValue();
            binder.setBean(customer);
            setFormVisible(true);
        }
    }

    private void setFormVisible(boolean visible) {
        firstName.setVisible(visible);
        lastName.setVisible(visible);
        save.setVisible(visible);
    }

    private void saveCustomer() {
        service.update(customer);
        updateGrid();
    }

    public void showNotification(String title, String message) {
        Notification.show(title, message, Notification.Type.HUMANIZED_MESSAGE);
    }

    @Override
    public OutputStream receiveUpload(String filename, String mimeType) {
        System.out.println("receive");
        try {
            tempFile = File.createTempFile(filename, "");
            // System.out.println(tempFile.getAbsolutePath());
            // tempFile.deleteOnExit();
            return new FileOutputStream(tempFile);
        } catch (IOException e) {
            e.printStackTrace();
        }

        return null;
    }

    @Override
    public void uploadSucceeded(SucceededEvent event) {
        // File destinationFile = new File("d:\\test\\" + event.getFilename());
        // FileUtils.moveFile(tempFile , destinationFile);
        service.processfile(tempFile);
        showNotification("CSV upload", "Success");
        updateGrid();
    }
}

1 个答案:

答案 0 :(得分:0)

该教程有点过时,并且使用了初始化程序使用的Vaadin 8,已经有很多变化。

对于addTextChangeListener,您可以使用addValueChangeListener代替 setInputPrompt将是setPlaceHolder

有几个网站也会注意到其他变化。例如。 https://vaadin.com/download/prerelease/8.0/8.0.0/8.0.0.alpha10/release-notes.html#incompatible

相关问题