DialogWindow с <V extends StadardView>

Добрый день.

jmix 2.6.0.
openide.

Для открытия экрана в диалоге используется DialogWindows. В метод view передается класс экрана (например: DataView.class, который наследуется от StandardView). Перед открытием экрана требуется задать его свойства поэтому используется метод build() и получается объект DialogWindow, но поскольку класс DataView параметризованный () получаем ошибку и объявлении DialogWindow:

Type parameter 'com.company.view.DataView' is not within its bound; should extend 'io.jmix.flowui.view.View<?>'

Предложение заключается в том, чтобы либо изменить текущие классы используемые для открытия диалогов с <V extends View<?>> на <V extends StadardView>, либо добавить классы работающие с <V extends StadardView>.

С уважением.

Добрый день.

Описанная выше проблема не решится изменением <V extends View<?>> на <V extends StadardView>, т.к. ее причиной является то, что Ваш DataView является типизированным, а передаете вы в метод view - BlankView.class. Т.е. Вы получаете следующее:

Screenshot 2025-09-02 at 13.33.12

Хотя ожидается, что будет DialogWindow<BlankView<String>> dialogWindow, т.к. или хотя бы DialogWindow<BlankView<?>> dialogWindow, т.к. BlankView имеет тип. Правда в этом случаее получаем другую ошибку:

Screenshot 2025-09-02 at 13.33.23

Вы можете избежать ошибки компиляции следующим образом:

DialogWindow<?> dialogWindow = dialogWindows.view(this, BlankView.class)
        .build();

//noinspection unchecked
BlankView<String> view = ((BlankView<String>) dialogWindow.getView());
view.setParam("test");

Или открывать экран по id и потом кастить dialogWindow.getView().

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

private <T> void setParam(T param) {
    // do nothing
}

Глеб