【问题标题】:Vaadin pass parameter to viewVaadin 传参查看
【发布时间】:2018-07-26 08:01:10
【问题描述】:

我目前正在使用 Vaadin 为电影数据库制作表格。我的问题是深度链接的整体情况。我想要一个带有电影 id 的 url,以便获得具体电影的形式。

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());

            }
        });

【问题讨论】:

  • 您使用的是哪个版本的 Vaadin?
  • 我目前正在使用 vaadin 8

标签: java spring-boot vaadin vaadin8


【解决方案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

【讨论】:

  • 感谢您的快速回复。我必须承认,我忘记提及导航器已经用于在不同类型的表单之间移动。我有三种不同项目的表格:电影、国家、语言。每个都有一个包含项目列表和主从表单的视图
  • 很高兴听到 :)
猜你喜欢
  • 2019-07-22
  • 2021-12-24
  • 2021-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-05
  • 2015-05-04
  • 2021-12-05
相关资源
最近更新 更多