gpt4 book ai didi

java - 在 Vaadin 框架中,如何获取客户端时区以用于渲染显示的第一个页面

转载 作者:行者123 更新时间:2023-12-02 18:43:43 25 4
gpt4 key购买 nike

从客户端获取时区的最新推荐方法是通过...

UI.getCurrent().getPage().retrieveExtendedClientDetails(extendedClientDetails -> {
extendedClientDetails.getRawTimezoneOffset();
extendedClientDetails.getTimezoneOffset();
});

但是,该方法在第一次调用时不是同步的。这意味着我们无法使用时区信息来渲染向用户显示的第一页。

是否有解决方法可以在渲染第一页之前(例如,在初始化 session 时)获取此信息?或者我可以以某种方式表明我希望 vaadin 在首次创建 session 时获取该信息吗?

最佳答案

没有办法做到这一点,因为 Vaadin 需要有机会在浏览器中运行 JavaScript 来查找该信息。作为解决方法,您可以实现任何依赖于该信息的 View ,以推迟呈现其实际内容,直到该信息可用为止。

因此,您的观点可能是这样的:

@Route
public class MyView extends VerticalLayout {
public MyView() {
UI.getCurrent().getPage().retrieveExtendedClientDetails(details -> {
add(new Text("Your time zone offset: " + details.getTimezoneOffset()));
});
}
}

如果详细信息不可用,最初只会显示一个空壳。它通常应该只持续一会儿,直到获取扩展详细信息,这样用户甚至可能不会注意到延迟。如果你想让它更明确,那么你可以同时显示一些临时占位符内容,例如不确定的进度条。

UI.getCurrent().getPage().retrieveExtendedClientDetails(details -> {
removeAll(); // Remove spinner if it happened to be there
add(new Text("Your time zone offset: " + details.getTimezoneOffset()));
});
if (getComponentCount() == 0) {
// We only get here if the Text component wasn't added immediately
ProgressBar spinner = new ProgressBar();
spinner.setIndeterminate(true);
add(spinner);
}

关于java - 在 Vaadin 框架中,如何获取客户端时区以用于渲染显示的第一个页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67724284/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com