我正在創建一個帶有 spring-boot 和 spring-security 的 Vaadin 應用程式。有一些 gui 元素可以修改。如何實作用戶對此有自己的看法?我認為框架已經處理的問題是,當不同的用戶登錄時,他會看到第一個用戶的修改。
我想使用 VaadinSessions 或類似的東西來支持多個用戶同時修改自己的獨占視圖。
我不知道該怎么辦。我嘗試添加到布局:
@VaadinSessionScope
我的天真方法是這樣的:在我自己的地圖中處理不同的用戶/會話。但是我越是考慮這個解決方案,我就越是問自己為什么不使用框架中的這些功能。如何分離視圖/用戶?
這是我的視圖類的頂部:
@PageTitle("ACME")
@Theme(value = Lumo.class, variant = Lumo.LIGHT)
@Route
@VaadinSessionScope
public class ACMEView extends VerticalLayout {
uj5u.com熱心網友回復:
Vaadin 以相反的方式作業。例如,如果您使用 定義了一個視圖組件類@Route,那么當他們導航到該視圖時,每個用戶都會有一個單獨的實體。它實際上甚至比這更進一步——如果用戶在多個瀏覽器選項卡中打開相同的視圖,那么他們將擁有該組件類的多個實體。
您需要在組件和資料之間進行分離。如果您@VaadinSessionScope使用組件 類,那么每個用戶都將擁有該組件的自己的實體。用戶將彼此隔離,但如果用戶打開多個瀏覽器選項卡,它仍然會導致問題。出于這個原因,您幾乎總是應該避免在組件類上使用范圍注釋。
多個用戶看到相同資料的原因是資料是共享的,而與組件實體無關。這是基于您如何配置這些組件,而不是基于組件本身的生命周期。在 Grid 的情況下,這與您傳遞給setDataProviderorsetItems方法的內容有關。我懷疑您的資料要么存盤在某個static欄位中,要么存盤在具有更廣泛范圍的單獨 Spring bean 中(Spring 中的默認范圍是單例)。您可能希望應用于@VaadinSessionScope保存資料的 bean,而不是應用于保存組件自身配置的組件類。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/366404.html
