Ссылка на другой экран

Добрый день.

Используем версию 7.0.3.

Подскажите пожалуйста, в предыдущих версиях можно было использовать fieldgroup с элементом field, в котором можно было указать link = “true” и указать на какую запись сущности указывает ссылка.

В новой версии в fieldgroup уже нельзя указать datasource.

А как это можно реализовать в новой версии ?

Заранее спасибо.

Добрый день.

При задании атрибута link внутренними механизмами для компонента FieldGroup создается компонент EntityLinkField. К сожалению у данного компонента нет xml разметки, т.к. он для внутреннего использования, но Вы можете добавить его программно:

EntityLinkField<User> entityLinkField = uiComponents.create(EntityLinkField.NAME);
entityLinkField.setValueSource(new ContainerValueSource<>(userDc, "group"));
form.add(entityLinkField);

Глеб

1 симпатия

Добрый день.
Спасибо за ответ.

Добавил EntityLinkField в событие onBeforeShow:

@Subscribe
private void onBeforeShow(BeforeShowEvent event) {
    Empl empl = getEditedEntity();
    Empl chiefEmpl = empl.getChief();
    if (chiefEmpl != null) {
        logger.info("Adding chief link to screen");
        EntityLinkField<Empl> chiefEmplEntityLinkField = uiComponents.create(EntityLinkField.NAME);
        chiefEmplEntityLinkField.setValueSource(
                    new ContainerValueSource<>(emplDc,"chief"));
        chiefEmplEntityLinkField.setValue(chiefEmpl);
        chiefEmplEntityLinkField.setStyleName(HaloTheme.LABEL_H1);
        chiefEmplEntityLinkField.setCaption(
            messages.getMessage(EmplEdit.class, "chief"));
        staffVbox.add(chiefEmplEntityLinkField);
    }
}

Но при нажатии на ссылку возникает предупреждение:

java.lang.IllegalStateException: Cannot get unfetched attribute [photo] from detached object com.svb.empl.entity.Empl-2ab46950-e0fc-b1e6-06c7-9a439d2f4f35 [detached].
	at org.eclipse.persistence.internal.queries.EntityFetchGroup.onUnfetchedAttribute(EntityFetchGroup.java:100)
	at com.haulmont.cuba.core.sys.persistence.CubaEntityFetchGroup.onUnfetchedAttribute(CubaEntityFetchGroup.java:74)
	at org.eclipse.persistence.internal.jpa.EntityManagerImpl.processUnfetchedAttribute(EntityManagerImpl.java:2998)
	at com.haulmont.chile.core.model.impl.AbstractInstance._persistence_checkFetched(AbstractInstance.java)
	at com.svb.empl.entity.Empl._persistence_get_photo(Empl.java)
	at com.svb.empl.entity.Empl.getPhoto(Empl.java:108)
	at com.svb.empl.web.empl.EmplEdit.setEntityToEdit(EmplEdit.java:69)
	at com.svb.empl.web.empl.EmplEdit.setEntityToEdit(EmplEdit.java:29)
	at com.haulmont.cuba.gui.builders.EditorBuilderProcessor.buildEditor(EditorBuilderProcessor.java:91)
	at com.haulmont.cuba.gui.builders.EditorBuilder.build(EditorBuilder.java:359)
	at com.haulmont.cuba.web.gui.components.WebEntityLinkField.openEntityEditor(WebEntityLinkField.java:323)
	at com.haulmont.cuba.web.gui.components.WebEntityLinkField.lambda$initComponent$61446b05$1(WebEntityLinkField.java:108)

Возможно стоит как-то указать сформированному EntityLinkField ссылку на view ?

У вас экран явно предполагает, что сущность будет загружена с определенным представлением.
Можете в контроллере экрана EmplEdit сделать проверку через PersistenceHelper.isLoadedWithView() на то, что переданный экз. сущности загружен с нужным представлением и, загрузить экземпляр с правильным представлением, если это не так.
Тогда, откуда бы не открылся этот экран - он “сам позаботится” о необходимой ему view.

4 симпатии

Спасибо большое заработало.

Добавил эту проверку и в событие onBeforeShow и в setEntityToEdit.

1 симпатия