java - Vaadin 从 RouterLayout 引用 mainLayout

标签 java cookies buffer vaadin

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

我试图通过'静态'来做到这一点,然后缓冲区对所有用户都是通用的,这是不正确的

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

带有静态缓冲区的代码:

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

主布局.java

public class MainLayout extends AppLayout implements RouterLayout {


    public static Set<Test> buffer;

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

基本 View .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);
        }
        /*...*/
    }
}

最佳答案

您实际上可以遍历布局的父布局直到主布局。例如。你可以做下面的事情

    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 并在需要时 Autowiring 它会更自然。下一版本的 Vaadin 还将添加特定的 RouteScope,如果需要,它允许更精确的范围界定。

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

关于java - Vaadin 从 RouterLayout 引用 mainLayout,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67783918/

相关文章:

Java 1.7 允许使用 '_' 的整数值,为什么在解析 Integer 时不这样做

java - Oracle 11g - 如何调用内部带有 DML 的函数?

javascript - 仅当 cookie 存在时才添加Class,否则隐藏

Android WebView-记住用户名和密码

javascript - 如何将 ArrayBuffer 转换为 AudioBuffer?

c - C中的多缓冲区管理

java - JAVA_TOOL_OPTIONS 中的环境变量未得到扩展

java - 如何解决 java servlet 中的 NoClassDefFoundError?

javascript - AMP 设置和获取 cookie 值

python - 给定字节缓冲区、数据类型、形状和步幅,如何创建 Numpy ndarray