如何在Vaadin中通过fetchCurrentURL获取并返回URL值
Vaadin中同步获取fetchCurrentURL返回值的方案
fetchCurrentURL是异步方法,它会向客户端发起请求获取当前URL,结果通过回调函数返回,所以没法像你尝试的那样直接把返回值赋值给字符串变量。可以通过以下两种方式实现需求:
方式一:用CompletableFuture封装异步结果
通过CompletableFuture把回调里的URL路径存起来,后续通过异步回调处理结果(避免阻塞UI线程):
CompletableFuture<String> currentPathFuture = new CompletableFuture<>(); UI.getCurrent().getPage().fetchCurrentURL(url -> { currentPathFuture.complete(url.getPath()); }); // 异步处理拿到的路径 currentPathFuture.thenAccept(path -> { String s = path; // 这里可以做你需要的业务操作,比如打印、赋值给成员变量等 Notification.show("当前路径:" + s); });
方式二:使用服务器端维护的位置信息(仅适用于路由同步场景)
如果你的页面路由变化都会同步到服务器(比如使用Vaadin官方路由机制),可以直接用服务器端已有的位置信息,这种是同步获取的:
String s = UI.getCurrent().getPage().getLocation().getPath(); Notification.show(s);
注意:这种方式拿到的是服务器端记录的URL,如果客户端手动修改了URL但没通知服务器,结果会和实际客户端URL不一致。如果需要绝对准确的客户端实时URL,优先用方式一。
内容的提问来源于stack exchange,提问作者Ji Lin
相关产品推荐
相关产品推荐

