Vaadin传参查看

Vaadin pass parameter to view

我目前正在使用 Vaadin 制作电影数据库的表格。我的问题是深度链接的整个情况。我想要一个 url 里面有一个电影的 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());

            }
        });

在视图之间导航时必须执行的操作:假设您有一个 View 电影列表,您可以从中 select 一部电影。当您 select 从该列表中选择一部电影时,您将移至电影 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
    }
}

这样一来,每一部你想要的片子都可以用心link,喜欢http://localhost:8081/Film/88