无法使用 RouterLink 在 Vaadin 中传递多个路径参数
Can't pass several path parameters in Vaadin using RouterLink
我是 Vaadin 的新手,正在尝试了解如何让 View 从 URL 获取多个参数。
例如
http://www.some.com/book/18/page/41
18号和41号是参数。
我发现我可以实现 HasUrlParameter<T>
然后使用 setParameter
方法,但它只能用于一个参数。
您是否在 setParameter
方法中使用了 @WildcardParameter
? Wildcard URL parameters
假设greet
(你的例子中的book
)是路由,那么下面的代码设置了18\page
。由于它是一个字符串,您需要对其进行解析并提取所需的值,但值就在那里。
@Route("greet")
public class WildcardGreeting extends Div
implements HasUrlParameter<String> {
@Override
public void setParameter(BeforeEvent event,
@WildcardParameter String parameter) {
if (parameter.isEmpty()) {
setText("Welcome anonymous.");
} else {
setText(String.format(
"Handling parameter %s.",
parameter));
}
}
}
P.S。与问题无关,但看你的URL,是不是查询参数更适合你Query parameters?
Vaadin 不支持 Java 视图具有多个参数。你可以做的是用 @WildcardParameter
注释参数,这样可以将多个路径段捕获到一个参数中。然后,您将不得不手动管理该值的内容 - 在生成 URL 时连接字符串并解析 setParameter
.
中的字符串
目前正在处理对多个参数的支持,但尚未完成。目前尚不清楚 Vaadin 的哪个未来版本将获得此功能,但我现在的猜测是版本 14.3 或 14.4。
带有解决方案的简单示例
@Route("book")
public class BookView extends Div implements HasUrlParameter<String> {
@Override
public void setParameter(BeforeEvent event, @WildcardParameter String parameter) {
if (!parameter.isEmpty()) {
String params[] = parameter.split("/");
if (params.length == 1) {
// Do something ..
} else if (params.length == 2) {
// Do another thing ..
} else {
// Do something else
}
}
}
}
link可以这样创建:
new RouterLink("No params", BookView.class);
new RouterLink("One param", BookView.class, "18");
new RouterLink("Two param", BookView.class, "18/edit");
Vaadin 14 似乎有更新并支持多路径参数。
示例:
@Route("user/:userID/:messageID/edit")
public class UserProfileEdit extends Div implements BeforeEnterObserver {
private String userID;
private String messageID;
@Override
public void beforeEnter(BeforeEnterEvent event) {
userID = event.getRouteParameters().get("userID").get();
messageID = event.getRouteParameters().get("messageID").get();
}
}
来源:https://vaadin.com/docs/v14/flow/routing/tutorial-router-templates
我是 Vaadin 的新手,正在尝试了解如何让 View 从 URL 获取多个参数。 例如
http://www.some.com/book/18/page/41
18号和41号是参数。
我发现我可以实现 HasUrlParameter<T>
然后使用 setParameter
方法,但它只能用于一个参数。
您是否在 setParameter
方法中使用了 @WildcardParameter
? Wildcard URL parameters
假设greet
(你的例子中的book
)是路由,那么下面的代码设置了18\page
。由于它是一个字符串,您需要对其进行解析并提取所需的值,但值就在那里。
@Route("greet")
public class WildcardGreeting extends Div
implements HasUrlParameter<String> {
@Override
public void setParameter(BeforeEvent event,
@WildcardParameter String parameter) {
if (parameter.isEmpty()) {
setText("Welcome anonymous.");
} else {
setText(String.format(
"Handling parameter %s.",
parameter));
}
}
}
P.S。与问题无关,但看你的URL,是不是查询参数更适合你Query parameters?
Vaadin 不支持 Java 视图具有多个参数。你可以做的是用 @WildcardParameter
注释参数,这样可以将多个路径段捕获到一个参数中。然后,您将不得不手动管理该值的内容 - 在生成 URL 时连接字符串并解析 setParameter
.
目前正在处理对多个参数的支持,但尚未完成。目前尚不清楚 Vaadin 的哪个未来版本将获得此功能,但我现在的猜测是版本 14.3 或 14.4。
带有解决方案的简单示例
@Route("book")
public class BookView extends Div implements HasUrlParameter<String> {
@Override
public void setParameter(BeforeEvent event, @WildcardParameter String parameter) {
if (!parameter.isEmpty()) {
String params[] = parameter.split("/");
if (params.length == 1) {
// Do something ..
} else if (params.length == 2) {
// Do another thing ..
} else {
// Do something else
}
}
}
}
link可以这样创建:
new RouterLink("No params", BookView.class);
new RouterLink("One param", BookView.class, "18");
new RouterLink("Two param", BookView.class, "18/edit");
Vaadin 14 似乎有更新并支持多路径参数。
示例:
@Route("user/:userID/:messageID/edit")
public class UserProfileEdit extends Div implements BeforeEnterObserver {
private String userID;
private String messageID;
@Override
public void beforeEnter(BeforeEnterEvent event) {
userID = event.getRouteParameters().get("userID").get();
messageID = event.getRouteParameters().get("messageID").get();
}
}
来源:https://vaadin.com/docs/v14/flow/routing/tutorial-router-templates