我目前正在使用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());
}
});
答案 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