Наследование от StandardDetailView

Есть такая необходимость, наследоваться от StandardDetailView. А уже потом от него пойдут контроллеры @ViewController.

public class CustomDetailView <T extends Document> extends StandardDetailView<T> {
     @Internal
    public CustomDetailView () {
        super();

        addBeforeSaveListener(this::onBeforeSave);
        addBeforeShowListener(this::onBeforeShow);
    }
    private void onBeforeSave(BeforeSaveEvent event) {
    }
    private void onBeforeShow(final BeforeShowEvent event) {
        log.warn("onBeforeShow...");
        this.setupEntityToEdit();
        boolean entityStatesIsNew = getEntityStates().isNew(getEditedEntity());
    }
}

Затем от этого класса уже буду наследоваться реальные контроллеры. Хотелось в событии onBeforeShow сделать необходимые действия. Но на строке
boolean entityStatesIsNew = getEntityStates().isNew(getEditedEntity()); вылетает ошибка “IllegalStateException: Edited entity isn’t initialized yet”.

Мне то понятно что за ошибка и что означает, не понимаю почему. Если тоже самое делать в реальном контроллере, то всё нормально, т.е. контроллер напрямую наследующий StandardDetailView. А если через CustomDetailView, то ошибка как раз на уровне CustomDetailView.

В чём может быть проблема?

Тут вопрос в том, как вы открываете экран (навигация или диалог). Есть у вас в экране DataLoadCoordinator или нет.

Если нет DataLoadCoordinator, то вы сами определяете когда должна загрузиться сущность.

Если есть DataLoadCoordinator, то при навигации сущность полностью грузится в BeforeShowEvent, при открытии в диалоге, она может быть установлена с неправильным fetchPlan и перезагружена в BeforeShowEvent.

У вас вызывается this.setupEntityToEdit();, по коду этот метод берет id из route и устанавливает его в dataLoader, то есть если экран открыт в диалоге, сущность не устанавливается. Если идет навигация, то скорее всего DataLoadCoordinator не успел загрузить сущность, ибо вы ставите id в загрузчик и стучитесь к сущности в одном событии.

В любом случае действия с сущностью лучше делать после BeforeShowEvent, ибо если вы будете как-то стучаться до сущности пока она не загружена с правильным fetchPlan, то можете поймать ошибку cannot get unfetched attribute.

Более точно сказать, почему с наследованием от StandardDetailView все норм, а с CustomDetailView нет, без тестового приложения сложно.