Это возможно при вашем подходе, но учтите, что getParen()
возвращает Optional<Component>
, а не Component
. Таким образом, вы должны сделать что-то вроде этого:
getParent().ifPresent(parent -> {
if (parent instanceof Dialog) {
((Dialog) parent).close();
}
});
Или, если вы смелый
((Dialog) getParent().get()).close();
Если вы хотите сделать это эталонным способом, это один из способов:
@Route
public class MainView extends VerticalLayout {
public MainView() {
Dialog dialog = new Dialog();
dialog.add(new DialogView(dialog));
dialog.open();
}
}
И ваш TestView2
public class DialogView extends VerticalLayout {
public DialogView(Dialog dialog) {
Button button = new Button("Next step");
button.addClickListener(e -> {
dialog.close();
Dialog newDialog = new Dialog();
newDialog.add(new Span("You are in the third step"));
newDialog.open();
});
add(button);
}
}
Вам даже не нужно закрывать первое диалоговое окно, вы можете просто заменить содержимое
public class DialogView extends VerticalLayout {
public DialogView(Dialog dialog) {
Button button = new Button("Next step");
button.addClickListener(e -> {
dialog.removeAll();
dialog.add(new Span("You are in the third step"));
});
add(button);
}
}
Если выу меня есть много представлений, которые вы хотите циклически просмотреть таким образом, я бы создал абстрактный класс, который реализует общую функциональность между всеми представлениями.