В общем случае, когда вам необходимо реализовать такое требование для перспективы администрирования для всех моделей элементов, я бы предложил вам добавить прослушиватель событий во время визуализации интерфейса редактора.
Для этого вам необходимореализовать средство визуализации пользовательских разделов:
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