我有以下路线:
@Route(value = "jobs/:jobId", layout = JobsLayout.class)
@AnonymousAllowed
public class ViewJob extends VerticalLayout implements BeforeEnterObserver, HasUrlParameter<String> {当我通过以下url访问应用程序时:
/jobs/456/test我正确地输入了ViewJob视图。
现在,我想以编程的方式从另一个Vaadin视图移到这个视图。为此,我试图做以下工作:
UI.getCurrent().navigate(ViewJob.class, "456/test");但应用程序失败,例外情况如下:
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。
为此,我有以下看法:
@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视图:
@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方法涉及以下重定向逻辑:
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部分。
我做错了什么?
发布于 2022-08-17 11:18:10
您已经在url (:jobId)中定义了一个路由参数。这必须与提供给URL的路由参数匹配:
UI.getCurrent().navigate(ViewJob.class, new RouteParameter("jobId", "456"));https://stackoverflow.com/questions/73387221
复制相似问题