Как автоматически сохранить в hybris? - PullRequest
0 голосов
/ 12 декабря 2018

Я хочу сохранить опцию раскрывающегося списка в бэк-офисе автоматически, не нажимая кнопку сохранения (кнопка сохранения отключена)?Как я могу это сделать?

1 Ответ

0 голосов
/ 12 декабря 2018

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

Для этого вам необходимореализовать средство визуализации пользовательских разделов:

public class CustomEditorAreaSectionRenderer extends com.hybris.cockpitng.widgets.editorarea.renderer.impl.DefaultEditorAreaSectionRenderer {

    @Autowired
    private ModelService modelService;

    @Override
    protected void processEditorBeforeComposition(final Editor editor, final DataType genericType, final WidgetInstanceManager widgetInstanceManager, final Attribute attribute, final Object object) {
        editor.addEventListener("onRequiredAction", (org.zkoss.zk.ui.event.Event event) -> {
            modelService.save(object);
        });
    }
}

Реализация по умолчанию объявлена ​​как пружинный компонент, поэтому у вас есть простой способ внедрить пользовательскую реализацию.Например, через псевдоним для editorAreaSectionRenderer.Объявление по умолчанию выглядит следующим образом:

<alias name="defaultEditorAreaTabRenderer" alias="editorAreaTabRenderer"/>
<bean id="defaultEditorAreaTabRenderer"
      class="com.hybris.cockpitng.widgets.editorarea.renderer.impl.DefaultEditorAreaTabRenderer"
      parent="abstractEditorAreaComponentRenderer" scope="prototype">
    <property name="editorAreaSectionRenderer" ref="editorAreaSectionRenderer"/>

</bean>

<alias name="defaultEditorAreaSectionRenderer" alias="editorAreaSectionRenderer"/>
<bean id="defaultEditorAreaSectionRenderer"
      class="com.hybris.cockpitng.widgets.editorarea.renderer.impl.DefaultEditorAreaSectionRenderer"
      parent="abstractEditorAreaComponentRenderer" scope="prototype">
    <property name="editorAreaPanelRenderer" ref="editorAreaPanelRenderer"/>
    <property name="validationRenderer" ref="validationRenderer"/>

</bean>

Обратите внимание, что процесс сохранения OOTB является довольно сложным действием, и его следует выполнять с осторожностью.Посмотрите, как это реализовано по умолчанию на com.hybris.cockpitng.widgets.baseeditorarea.DefaultEditorAreaController#saveObject

...