首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带参数的Vaadin23路径导航

带参数的Vaadin23路径导航
EN

Stack Overflow用户
提问于 2022-08-17 10:53:39
回答 1查看 159关注 0票数 0

我有以下路线:

代码语言:javascript
复制
@Route(value = "jobs/:jobId", layout = JobsLayout.class)
@AnonymousAllowed
public class ViewJob extends VerticalLayout implements BeforeEnterObserver, HasUrlParameter<String> {

当我通过以下url访问应用程序时:

代码语言:javascript
复制
/jobs/456/test

我正确地输入了ViewJob视图。

现在,我想以编程的方式从另一个Vaadin视图移到这个视图。为此,我试图做以下工作:

代码语言:javascript
复制
UI.getCurrent().navigate(ViewJob.class, "456/test");

但应用程序失败,例外情况如下:

代码语言:javascript
复制
com.vaadin.flow.router.NotFoundException: No route found for the given navigation target 'com.example.ui.views.job.view.ViewJob' and parameters '{___url_parameter=456/test}'
    at com.vaadin.flow.router.RouteConfiguration.getUrl(RouteConfiguration.java:515)
    at com.vaadin.flow.component.UI.navigate(UI.java:914)

我做错了什么,如何正确导航到ViewJob视图?

更新

The goal --我正在尝试实现类似于StackOverflow的逻辑--当您访问问题页面时,没有段塞,例如Vaadin23 route navigation with parameters,您将自动重定向到正确的url,并添加了- Vaadin23 route navigation with parameters

为此,我有以下看法:

代码语言:javascript
复制
@Route(value = "jobs", layout = JobsLayout.class)
@AnonymousAllowed
public class AllJobsView extends VerticalLayout implements LocaleChangeObserver, HasUrlParameter<String> {

@Override
    public void setParameter(BeforeEvent event, @OptionalParameter String parameter) {
        try {
            Long jobId = Long.parseLong(parameter);
            Vacancy vacancy = vacancyService.findById(jobId, VaadinUtils.getCurrentLocaleIso6391());

            UI.getCurrent().navigate(ViewJob.class, new RouteParameters(Map.of(ViewJob.JOB_ID_PARAMETER, parameter, HasUrlParameterFormat.PARAMETER_NAME, vacancy.getNameSlug())));
            return;
        } catch (Exception e) {
            e.printStackTrace();
        }

这是ViewJob视图:

代码语言:javascript
复制
@Route(value = "jobs/:jobId", layout = JobsLayout.class)
@AnonymousAllowed
public class ViewJob extends VerticalLayout implements BeforeEnterObserver, HasUrlParameter<String> {
....
}

当我尝试访问/jobs - AllJobsView时,呈现的是正确的。当我尝试访问/jobs/507/vacancy5 - JobView时,正确地呈现了

但是,当我试图访问/jobs/507时,AllJobsView.setParameter方法涉及以下重定向逻辑:

代码语言:javascript
复制
UI.getCurrent().navigate(ViewJob.class, new RouteParameters(Map.of(ViewJob.JOB_ID_PARAMETER, parameter, HasUrlParameterFormat.PARAMETER_NAME, vacancy.getNameSlug())));

之后,用户被正确地导航到/jobs/507/vacancy5 url,但是JobView内容没有呈现。只有JobsLayout部分。

我做错了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-08-17 11:18:10

您已经在url (:jobId)中定义了一个路由参数。这必须与提供给URL的路由参数匹配:

代码语言:javascript
复制
UI.getCurrent().navigate(ViewJob.class, new RouteParameter("jobId", "456"));
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73387221

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档