【问题标题】:Vaadin Refer to mainLayout from RouterLayoutVaadin 参考RouterLayout中的mainLayout
【发布时间】:2021-06-01 15:26:40
【问题描述】:

我需要在应用程序屏幕之间创建一个缓冲区。 我想在 mainLayout 中创建一个缓冲区,但我无法从子层访问它

我试图通过'static'来做,那么缓冲区对所有用户都是通用的,这是不正确的

cookies也不适合,因为数据结构复杂

带有静态缓冲区的代码:

在示例中,创建了一个表,当你选择表中的元素时,将它们写入缓冲区,如果缓冲区中有元素,则将它们标记在表中

MainLayout.java

public class MainLayout extends AppLayout implements RouterLayout {


    public static Set<Test> buffer;

    public MainLayout() {
        buffer = new HashSet<Test>();
        /*...*/
    }
}

BasicView.java

@Route(value = "BasicView", layout = MainLayout.class)
@RouteAlias(value = "/BasicView", layout = MainLayout.class)
public class BasicView extends VerticalLayout {

    private final Grid<Test> tests;

    public BasicView(@Autowired TestService){
        /*...*/
        tests = new Grid<>(Test.class, false);
        tests.addSelectionListener(event -> {
        MainLayout.buffer = event.getAllSelectedItems();});
        /*...*/
        for(Test el : MainLayout.buffer)
        {
           tests.select(el);
        }
        /*...*/
    }
}

【问题讨论】:

  • 能否请您添加代码(例如带有静态“缓冲区”的代码,尽管它失败了),以便我们对其进行改进。至少对我来说,不清楚您所说的“缓冲区”是什么意思。

标签: java cookies buffer vaadin


【解决方案1】:

您实际上可以将布局的父级遍历到主布局。例如。你可以在下面做一些事情

    Optional<Component> parent = this.getParent();
    Buffer buffer = null;
    while (parent.isPresent()) {
        Component p = parent.get();
        if (p instanceof MainLayout) {
            MainLayout main = (MainLayout) p;
            buffer = main.getBuffer();
        }
        parent = p.getParent();
    }

但是我不确定这是否是最好的方法。如果你碰巧使用例如Spring Boot,将这个缓冲区作为 VaadinSessionScoped bean 并在需要的地方自动装配它会更自然。下一个版本的 Vaadin 还将添加特定的 RouteScope,如果需要,它允许更多的精确范围。

另请参阅有关此问题的旧 Vaadin 论坛讨论:https://vaadin.com/forum/thread/17917385/vaadin-14-accessing-components-of-mainview

【讨论】:

  • 是的,我使用 Spring Boot 并自动装配数据库查询服务,感谢 bean 的建议,我会努力解决的。
  • 似乎只有在附加到父布局后才能工作,所以在构造函数中它不起作用
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-02
  • 1970-01-01
相关资源
最近更新 更多