Facets

Facets 是非可视化组件,用于为视图或组件添加辅助功能。

内置 Facets

框架提供下列 facets:

在 Jmix Studio 中添加 facet:

点击操作面板中的 Add Component,选择 Facets,然后双击需要添加的 facet 项。

add facet

Studio 会创建 <facets> 元素:

<facets>
    <settings auto="true"/>
</facets>

在 Jmix Studio 可以使用 Jmix UI 组件属性面板查看和编辑 facet 属性。

自定义 Facets

应用程序或者扩展组件可以提供自定义的 facets。按照下列步骤创建自定义 facet:

  1. 创建一个接口,继承 io.jmix.flowui.facet.Facet

  2. 根据 io.jmix.flowui.facet.impl.AbstractFacet 创建一个实现类。

  3. 使用新的 FacetRegistrationBuilder 注册 facet(参考下面的示例)

  4. 创建一个可用于视图 XML 中的 XSD 结构文件。

  5. 可选,创建一个带注解标记的接口,这样可以支持在 Studio 的视图设计器中的 Jmix UI 面板展示该 facet。

具体实现请参考框架的 DataLoadCoordinatorUrlQueryParametersFacet 类。

注册自定义 Facet

Facet 注册机制包含三个主要组件:

  • 实现 —— 实现 facet 逻辑的类。

  • 加载器 —— 从 XML 读取 facet 配置并创建 facet 实例的类。

  • 标签 —— 用于在视图中声明 facet 的 XML 元素名称。

可以使用 FacetRegistrationBuilder 注册新的 facet 组合。

注册自定义定时器 facet 的示例:

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 指定实现 facet 的类。
2 如果你的 facet 应该替换现有的框架 facet(例如标准的 Timer),则调用该方法。这会把视图中原始 facet 的所有使用替换成自定义实现。
3 将 XML 标签(例如 "timer")与加载器类关联。加载器必须扩展 io.jmix.flowui.xml.facet.loader.FacetLoader,并且知道如何从 XML 创建 facet。

如果你的 facet 没有替换现有的 facet,可以省略 replaceFacet(),只需提供一个加载器即可:

@Bean
    public FacetRegistration customTimerFacet() {
        return FacetRegistrationBuilder.create(TimerExtImpl.class)
                .withFacetLoader("customTimer", TimerFacetExtLoader.class)
                .build();
    }