Vaadin将参数传递给视图

时间:2018-07-26 08:01:11

标签: java spring-boot vaadin vaadin8

我目前正在使用Vaadin制作电影数据库表格。我的问题是与深层链接有关的整个情况。我想在其中添加一个带有电影ID的网址,以便能够获得具体电影的形式。

localhost:port/filmView/idOfSelectedMovie

我目前正在使用pushState,但是有几个问题。

1)当我在ID之前添加字符串“ Film /”时,第一个选择工作正常,但是在进行以下选择时,URL只会继续添加它。

http://localhost:8081/Film/Film/Film/Film/Film/4

2)我尝试的第二个选项是仅使用一个ID。效果是该URL仅使主机保持端口,并摆脱了ViewName

http://localhost:8801/4

我已经尝试使用replaceState和Urifragment方法,效果一点也不好。

处理列表中电影的功能

 this.itemsList.addSelectionListener(selectionEvent -> {
            if (selectionEvent.getFirstSelectedItem().isPresent()) {
                Film selectedFilm = selectionEvent.getFirstSelectedItem().get();
                this.setupForm(selectedFilm);
                Page.getCurrent().pushState("Film/" + selectedFilm.getFilmId());

            }
        });

1 个答案:

答案 0 :(得分:1)

在这些视图之间导航时要做的事情:假设您有一个View,其中包含电影列表,可以从中选择一部电影。从该列表中选择电影时,您将移至电影View

getUI().getNavigator().navigateTo(FilmView + "/" + filmId); //let's say id 88

以这种方式,您将导航到http://localhost:8081/Film/88

现在,在您的FilmView中,您可以获取并使用此ID,例如:

public class FilmView extends VerticalLayout implements View{
    @Override
    public void enter(ViewChangeEvent event) {
        String yourPassedId = event.getParameters();
        //do stuff with your id, for example loading from DB
    }
}

通过这种方式,您可以通过硬链接到达想要的每部电影,例如http://localhost:8081/Film/88