Доброго дня.
Jmix 2.5.0
Подскажите, пожалуйста, базовый пример реализации компонент-рендерера, который можно было бы декларативно навесить (переиспользовать для разных колонок и сущностей) на булевое property колонки datagrid для отображения Checkbox.
Добрый день,
Вы можете создать CheckboxRenderer
:
public class CheckboxRenderer extends ComponentRenderer<Checkbox, Object> {
public CheckboxRenderer(ValueProvider<Object, Boolean> valueProvider) {
super(item -> new Checkbox(valueProvider.apply(item)));
}
}
и CheckboxRendererProvider
, который обязательно реализовывает io.jmix.flowui.xml.layout.loader.component.datagrid.RendererProvider
:
@Component("demo_CheckboxRendererProvider")
public class CheckboxRendererProvider implements RendererProvider<CheckboxRenderer> {
public static final String NAME = "checkboxRenderer";
@Override
public boolean supports(String rendererName) {
return NAME.equals(rendererName);
}
@Override
public CheckboxRenderer createRenderer(Element element,
MetaPropertyPath metaPropertyPath,
ComponentLoader.Context context) {
return new CheckboxRenderer((ValueProvider<Object, Boolean>) item ->
EntityValues.getValueEx(item, metaPropertyPath));
}
}
Тогда в XML можно будет задавать кастомный элемент рендерера:
<column property="active">
<checkboxRenderer/>
</column>
Проблема только в том, что научить XML подсвечивать и предлагать Ваш рендерер проблематично.
Глеб
1 симпатия