[英]In Vaadin framework, how can I get the client time zone to use in rendering the very first page displayed
從客戶端獲取時區的最新推薦方法是通過...
UI.getCurrent().getPage().retrieveExtendedClientDetails(extendedClientDetails -> {
extendedClientDetails.getRawTimezoneOffset();
extendedClientDetails.getTimezoneOffset();
});
但是,此方法在第一次調用時不是同步的。 這意味着我們不能使用時區信息來呈現顯示給用戶的第一頁。
在呈現第一頁之前是否有解決方法來獲取此信息(例如,在初始化 session 時)? 或者我能否以某種方式表明我希望 vaadin 在首次創建 session 時獲取該信息?
沒有辦法這樣做,因為 Vaadin 需要有機會在瀏覽器中運行 JavaScript 以查找該信息。 作為一種解決方法,您可以實現任何依賴於信息的視圖,以推遲呈現其實際內容,直到信息可用。
因此,您的觀點可能是這樣的:
@Route
public class MyView extends VerticalLayout {
public MyView() {
UI.getCurrent().getPage().retrieveExtendedClientDetails(details -> {
add(new Text("Your time zone offset: " + details.getTimezoneOffset()));
});
}
}
如果詳細信息不可用,這最初只會顯示一個空的 shell。 它通常應該只持續片刻,直到獲取擴展的詳細信息,這樣用戶甚至可能不會注意到延遲。 如果您想讓它更明確,那么您可以同時顯示一些臨時占位符內容,例如不確定的進度條。
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);
}
我相信答案是否定的。 瀏覽器不會在初始請求中提供該信息; 您只能在第一個響應返回瀏覽器后執行 JS。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.