gpt4 book ai didi

java - Vaadin 中的单例

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:07:01 29 4
gpt4 key购买 nike

Vaadin 中使用 Singleton pattern 的 GUI(为我的案例附加一个窗口)是一个好习惯吗?

My use-case is: One window cannot be displayed by other users while if it is already in use by one user.


在那个用例之前,我只是简单地将窗口添加到 gui,如下所示:

  this.communicationWindow = new CommunicationConfigWindow();
this.configSettingsButton.addClickListener( e -> {
if ( !UI.getCurrent().getWindows().contains( this.communicationWindow )
&& this.communicationWindow != null )
{
this.communicationWindow.init( this.config );
this.getUI().addWindow( this.communicationWindow );
}
} );

现在因为我希望它只被一个用户显示,而不是

this.communicationWindow = new CommunicationConfigWindow();

我简单地将它变成了如下所示的 singleton 并简单地添加了 try/catch block ;

this.communicationWindow = CommunicationConfigWindow.getInstance();
this.communicationWindow = new CommunicationConfigWindow();
this.configSettingsButton.addClickListener( e -> {
if ( !UI.getCurrent().getWindows().contains( this.communicationWindow )
&& this.communicationWindow != null )
{
this.communicationWindow.init( this.config );
try
{
this.getUI().addWindow( this.communicationWindow );
}
catch(IllegalArgumentException ex)
{
Notification.show( "Configuration invalid", Type.WARNING_MESSAGE);
}
}
});

现在,它不允许许多用户显示该窗口(这是我想要的),但有 3 件事:

  1. 我真的觉得那是一种不好的做法,
  2. 当窗口正在显示时,用户关闭浏览器不会让其他用户继续显示。
  3. 我真的是 Vaadin 的新手。

欢迎任何方法和建议。

谢谢。

最佳答案

这样不行。

任何 UI 组件都分配给一个 Vaadin session 。因此,您不能让一个窗口被多个 UI 实例使用。

处理您的用例的正确方法是为每个用户创建一个窗口,然后将它们与某种事件总线或广播耦合,以便更新所有窗口。

为此,您需要在您的项目中启用推送,因为服务器必须向“非 Activity ”用户发送更新。

https://vaadin.com/docs/v8/framework/articles/BroadcastingMessagesToOtherUsers.html

关于java - Vaadin 中的单例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53554633/

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