Navigation 带参数的vaadin导航

Navigation 带参数的vaadin导航,navigation,parameter-passing,vaadin,vaadin-flow,Navigation,Parameter Passing,Vaadin,Vaadin Flow,在我的项目中,我有一个jpa数据库连接,存储练习。我从数据库中读取所有练习,并将它们存储到变量allExercises中。之后,我将每个练习的标题保存在一个按钮中,将它们添加到GUI的一个框中,并添加一个click listener事件,该事件处理到下一个视图的导航。下一个视图是所选练习的详细视图。要知道我单击了哪个练习,我想将练习对象的id作为参数传递。目前,我有以下代码: for(Exercise exercise : allExercises) { // create ne

在我的项目中,我有一个jpa数据库连接,存储练习。我从数据库中读取所有练习,并将它们存储到变量allExercises中。之后,我将每个练习的标题保存在一个按钮中,将它们添加到GUI的一个框中,并添加一个click listener事件,该事件处理到下一个视图的导航。下一个视图是所选练习的详细视图。要知道我单击了哪个练习,我想将练习对象的id作为参数传递。目前,我有以下代码:

for(Exercise exercise : allExercises) {
        // create new button with exercise title
        Button bt = new Button(exercise.getTitle());
        // add button to box
        boxExerciseTitle.add(bt);
        // add action event
        bt.addClickListener(e -> UI.getCurrent().navigate(ExerciseDetailView.class, exercise.getId()));
}
此代码不起作用。ID分别存在一个问题,即导航函数不处理这两个参数

我的目标是在细节视图中读取参数,如下所示:

public class ExerciseDetailView extends VerticalLayout implements View{
    @Override
    public void enter(ViewChangeEvent event) {
        String myPassedId = event.getParameters();
        ...
    }
}

如何更改代码,以便在Vaadin中将id作为参数传递?

详细信息视图必须实现
HasUrlParameter
,然后在
setParameter
方法中获取参数:

@Route(value = "exercise")
public class ExerciseDetailView  extends VerticalLayout
        implements HasUrlParameter<Long> {

    @Override
    public void setParameter(BeforeEvent event,
                             Long exerciseId) {
        // find the single exercise using the given id
        // Exercise exercise = exerciseRepository.findById(exerciseId);
    }
}
@Route(value=“exercise”)
公共类ExerciseDetailView扩展了垂直布局
实现HasUrlParameter{
@凌驾
public void setParameter(事件前,
长时间运动){
//使用给定的id查找单个练习
//Exercise Exercise=exerciseRepository.findById(exerciseId);
}
}
文件:


如果
exercise.getId()
的类型不是长的,而是整数或其他数字,然后相应地更改
HasUrlParameter
的类型。

您使用的是哪个vaadin版本?@KasparScherrer:我使用的是vaadin版本14@KasparScherrer可能,但从问题中我看不到id的类型。我使用字符串是因为这一行:String myPassedId=event.getParameters()@卡斯切雷尔:好的。我不知道Vaadin<10:-)如果您使用了
HasUrlParameter
,那么您必须更改
。导航(ExerciseDetailView.class,exercise.getId())
。导航(ExerciseDetailView.class,exercise.getId().toString())
。您仍然假设id很长。它可以是任何数据类型:-)我冒昧地将此添加到答案中。如果您不同意,请随时将其还原为您的版本。我正在删除这里的所有评论:)