我目前正在使用 Vaadin 制作电影数据库表格。我的问题是深层链接的整个情况。我想要一个带有电影 ID 的 url,以便能够获得具体电影的形式。
localhost:port/filmView/idOfSelectedMovie
我目前正在使用pushState,但有几个问题。
1) 当我在 Id 之前添加字符串“Film/”时,第一个选择工作正常,但是对于以下选择,网址只会不断添加此内容。
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 之间导航时必须执行的操作:假设您有一个带有电影列表的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
}
}
这样,您就可以通过硬链接(hard link)访问您想要的每部电影,例如http://localhost:8081/Film/88
关于java - Vaadin传递参数给 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51533838/