Открытие экрана в диалоговом режиме из меню в Jmix 2.x

Добрый день!

Столкнулся с задачей настройки открытие экрана в диалоговом окне при переходе из раздела меню в Jmix 2.x.

В Jmix 1.x для этой цели использовался параметр openMode в menu.xml для пункта меню. Например:
<item id="myScreen" openMode="DIALOG"/>

Если такой возможности нет, то может есть вариант того, чтобы экран вообще открывался только в диалоговом окне. Такой вариант мне бы тоже подошел.

Добрый день!

Как вариант, вы можете создать beanMenuItem и в нём открывать нужный экран:

menu.xml:

<item bean="myBean" beanMethod="openDialog" title="Open dialog"/>

MyBean.java

@Component
public class MyBean {

    private DialogWindows dialogWindows;

    @Autowired
    public void setDialogWindows(DialogWindows dialogWindows) {
        this.dialogWindows = dialogWindows;
    }

    public void openDialog() {
        dialogWindows.view(UiComponentUtils.getCurrentView(), BlankView.class)
                .open();
    }
}

Соответствующая дока:
https://docs.jmix.ru/jmix/flow-ui/menu-config.html#item-attributes

С уважением,
Дмитрий

Добрый день!

<item bean="djd_DialogViewOpener" beanMethod="openDialogView"
              title="msg:///InformationView.title">
            <properties>
                <property name="viewId" value="InformationView"/>
            </properties>
</item>
@Component("djd_DialogViewOpener")
public class DialogViewOpener {

    private final DialogWindows dialogWindows;

    public DialogViewOpener(DialogWindows dialogWindows) {
        this.dialogWindows = dialogWindows;
    }

    public void openDialogView(String viewId) {
        dialogWindows.view(UiComponentUtils.getCurrentView(), viewId)
                .open();
    }
}

Хочу написать вот такой Bean. Подскажите, как работает передача параметров в bean? В таком виде это не работает и пишет, что метода openDialogView не существует.

NoSuchMethodException: No such accessible method: openDialogView() on object: DialogViewOpener

Он будто бы пытается найти метод openDialogView без параметров и пишет ошибку. Так понимаю принимать параметры нужно как-то по-другому

Все, разобрался.

Для передачи параметров в метод нужно использовать Map.

public void openDialogView(Map<String, Object> parameters) {
        String viewId = (String) parameters.get("viewId");
        if (viewId == null) {
            return;
        }

        dialogWindows.view(UiComponentUtils.getCurrentView(), viewId)
                .open();
    }
1 симпатия