gpt4 book ai didi

java - 从 Singleton 调用 Vaadin 组件上的 bean 方法

转载 作者:行者123 更新时间:2023-12-01 19:44:11 24 4
gpt4 key购买 nike

我正在尝试从 Singleton 更新简单的 Vaadin UI 组件:

这是组件:

public class MaintenanceModeLogoutMessageLayout extends HorizontalLayout {

public MaintenanceModeLogoutMessageLayout() {
addComponent(new Label("test"));
}

public void changeVisibility(final Boolean visible) {
setVisible(visible);
}

这是我的单例,我需要在启动时运行

@Singleton
@Startup
public class SingletonTest {

private void executeMaintenanceModeChange(final Boolean maintenance) {

try {
final BeanManager beanManager = InitialContext.doLookup("java:comp/BeanManager");
final Set<Bean<?>> beans = beanManager.getBeans(MaintenanceModeLogoutMessageLayout.class);
final Bean<?> bean = beanManager.resolve(beans);

final CreationalContext<?> cc = beanManager.createCreationalContext(bean);
final MaintenanceModeLogoutMessageLayout object = (MaintenanceModeLogoutMessageLayout) beanManager.getReference(bean,
MaintenanceModeLogoutMessageLayout.class, cc);

if (object == null) {
LOG.warning("Cant find any bean for class " + MaintenanceModeLogoutMessageLayout.class.getSimpleName());
return;
}

Method method = bean.getBeanClass().getDeclaredMethod("changeVisibility", Boolean.class);
method.invoke(object, maintenance);

} catch (final NamingException | IllegalArgumentException | NoSuchMethodException | IllegalAccessException | InvocationTargetException e) {
LOG.log(Level.SEVERE, "Can't lookup object ");
}

}

}

正如你所看到的,我正在触发事件,试图找到现有的 bean 并调用该对象的方法。但问题是,即使它是当前 bean,UI.getCurrent() 也是 null

如果我制作组件@UIScoped我会遇到异常

Caused by: java.lang.IllegalStateException: Session data not recoverable for Managed Bean

我如何访问用户界面?我怎样才能以这种方式更新 Vaadin 组件?

最佳答案

您的问题是这个问题的变体,解决方案是相同的。

Vaadin: get reference of UI to change data

基本上,您的 tomcat/servlet 引擎中将运行多个 UI 实例。 (每个用户/浏览器至少一个)

因此,您必须将消息广播到 UI 的所有实例,然后进行适当的处​​理。

如果它应该有异步(无需用户操作),那么您还需要启用推送,以便将消息推送到客户端网络浏览器。否则,它只会在用户下次与 vaadin 应用程序交互时显示。

关于java - 从 Singleton 调用 Vaadin 组件上的 bean 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54076806/

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