1

我是 Vaadin 的新手,并试图了解如何让 View 从 URL 获取多个参数。例如

http://www.some.com/book/18/page/41

数字 18 和 41 是参数。

我发现我可以实现HasUrlParameter<T>然后使用setParameter方法,但它只能用于一个参数。

4

4 回答 4

1

@WildcardParameter在你的setParameter方法中使用吗?通配符 URL 参数

假设greet(The bookin 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与问题无关,但查看您的网址,查询参数是否更适合您查询参数

于 2020-04-08T04:51:17.263 回答
1

Vaadin 中没有内置的 Java 视图支持多个参数。您可以做的是对参数进行注释,@WildcardParameter以便可以将多个路径段捕获到一个参数中。然后,在生成 URL 和解析setParameter.

目前正在研究对多个参数的支持,但工作尚未完成。目前尚不清楚 Vaadin 的哪个未来版本将获得此功能,但我现在的猜测是它将是 14.3 或 14.4 版本。

于 2020-04-08T06:39:24.923 回答
0

似乎 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

于 2021-11-08T15:30:31.723 回答
-1

解决方案的简单示例

@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");
于 2020-07-21T16:08:58.990 回答