我正在使用Vaadin 14.0.3。我有一个方法MainLayout的类someCode。我将此类用作另一个名为MainView的类的布局。是否可以在someCode中使用方法MainView?例子如下:

public class MainLayout {
    public void someCode() {
    }
}

@Route(value = "main", layout = MainLayout.class)
public class MainView {
}


谢谢!

最佳答案

有可能,但这不一定是一个很好的实践,因为它紧密地结合了各个类。

就是说,如果您使用的是Spring,则可以使MainLayout成为UIScoped Spring组件,并在MainView中对其进行自动装配。

否则,您将必须使用getParent()方法并将结果转换为MainLayout。

@Override
public void onAttach(AttachEvent event) {
    Optional<Component> parent = getParent();
    while (parent.isPresent()) {
        Component p = parent.get();
        if (p instanceof MainLayout) {
            MainLayout main = (MainLayout) p;
            main.hello();
        }
        parent = p.getParent();
    }
}

10-04 18:10