我是 Vaadin 的新手,并试图了解如何让 View 从 URL 获取多个参数。例如
http://www.some.com/book/18/page/41
数字 18 和 41 是参数。
我发现我可以实现HasUrlParameter<T>
然后使用setParameter
方法,但它只能用于一个参数。
你@WildcardParameter
在你的setParameter
方法中使用吗?通配符 URL 参数
假设greet
(The book
in your case) 是路线,那么下面的代码设置18\page\41
. 由于它是一个字符串,因此您需要对其进行解析并提取所需的值,但该值就在那里。
@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));
}
}
}
PS与问题无关,但查看您的网址,查询参数是否更适合您查询参数?
Vaadin 中没有内置的 Java 视图支持多个参数。您可以做的是对参数进行注释,@WildcardParameter
以便可以将多个路径段捕获到一个参数中。然后,在生成 URL 和解析setParameter
.
目前正在研究对多个参数的支持,但工作尚未完成。目前尚不清楚 Vaadin 的哪个未来版本将获得此功能,但我现在的猜测是它将是 14.3 或 14.4 版本。
似乎 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
解决方案的简单示例
@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
}
}
}
}
可以这样创建链接:
new RouterLink("No params", BookView.class);
new RouterLink("One param", BookView.class, "18");
new RouterLink("Two param", BookView.class, "18/edit");