Фасеты
Фасеты - это невизуальные компоненты, которые добавляют дополнительное поведение к экрану или его компонентам.
Встроенные фасеты
Фреймворк предоставляет следующие фасеты:
Чтобы добавить какой-либо фасет на экран, используйте Jmix Studio.
Нажмите Add Component на панели действий, затем выберите раздел Facets и дважды кликните по выбранному элементу фасета.
Студия создаст элемент <facets>:
<facets>
<settings auto="true"/>
</facets>
|
Вы можете просматривать и редактировать атрибуты фасета в Jmix Studio используя панель испектора Jmix UI. |
Пользовательские фасеты
Приложения или дополнения могут предоставлять свои собственные фасеты. Чтобы создать пользовательский фасет, выполните следующие шаги:
-
Создайте интерфейс, расширяющий
io.jmix.flowui.facet.Facet. -
Создайте класс реализации на основе
io.jmix.flowui.facet.impl.AbstractFacet. -
Зарегистрируйте фасет, используя
FacetRegistrationBuilder(смотрите подробности ниже). -
Создайте XSD-схему для использования фасета в XML-дескрипторах экранов.
-
Опционально создайте аннотированный интерфейс для добавления поддержки фасета на панели инспектора Jmix UI в дизайнере экранов Студии.
Классы DataLoadCoordinator и UrlQueryParametersFacet фреймворка могут быть хорошими примерами для создания фасета.
Регистрация пользовательского фасета
Механизм регистрации фасетов состоит из трех основных компонентов:
-
Реализация - класс, реализующий логику фасета.
-
Загрузчик (Loader) - класс, который читает конфигурацию фасета из XML и создает экземпляр фасета.
-
Тег (Tag) - имя XML-элемента, используемое для объявления фасета в экране.
Вы можете зарегистрировать новые комбинации фасетов, используя FacetRegistrationBuilder.
Пример регистрации пользовательского фасета таймера:
import io.jmix.flowui.facet.Timer;
import io.jmix.flowui.sys.registration.FacetRegistration;
import io.jmix.flowui.sys.registration.FacetRegistrationBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class FacetConfiguration {
@Bean
public FacetRegistration extTimerFacet() {
return FacetRegistrationBuilder.create(TimerExtImpl.class) (1)
.replaceFacet(Timer.class) (2)
.withFacetLoader("timer", TimerFacetExtLoader.class) (3)
.build();
}
}
| 1 | Указывает класс, реализующий фасет. |
| 2 | Используется, если ваш фасет должен заменить существующий фасет фреймворка (например, стандартный Timer). Этот вызов заменяет все использования оригинального фасета в экранах вашей пользовательской реализацией. |
| 3 | Связывает XML-тег (например, "timer") с классом загрузчика. Загрузчик должен расширять io.jmix.flowui.xml.facet.loader.FacetLoader и знать, как создать фасет из XML. |
Если ваш фасет не заменяет существующий, вы можете опустить replaceFacet() и просто предоставить загрузчик:
@Bean
public FacetRegistration customTimerFacet() {
return FacetRegistrationBuilder.create(TimerExtImpl.class)
.withFacetLoader("customTimer", TimerFacetExtLoader.class)
.build();
}