simplePagination 简单分页器

simplePagination 是一个分页加载数据的组件。可以在 dataGridtreeDataGrid 组件使用。

  • XML 元素:simplePagination

  • Java 类:SimplePagination

基本用法

simplePagination 的外观很简单,包含行数和导航按钮。

也可以带包含每页条数的 下拉列表

simple pagination

Jmix Studio 在为实体创建 StandardListView 时,默认生成 simplePagination

<data readOnly="true">
    <collection id="usersDc"
                class="com.company.onboarding.entity.User">
        <fetchPlan extends="_base">
            <property name="department" fetchPlan="_base"/>
        </fetchPlan>
        <loader id="usersDl">
            <query>
                <![CDATA[select e from User e order by e.username]]> (1)
            </query>
        </loader>
    </collection>
</data>
<layout expand="usersTable">
        <simplePagination itemsPerPageVisible="true"
                          id="simplePagination"
                          dataLoader="usersDl"/> (2)
</layout>
1 定义 集合加载器 加载 User 实体。
2 simplePaginationdataLoader 连接。

Items per Page

simplePagination 有一个特殊的 comboBox 提供选项可以限制每页展示的条数。设置 itemsPerPageVisible 属性为 true 可以显示。默认值为 false

items per page

该列表的默认值通过 jmix.ui.component.pagination-items-per-page-items 属性配置。

也可以通过 itemsPerPageItems 属性配置自定义的选项列表。属性值必须是逗号分隔的选项:

<simplePagination dataLoader="usersDl"
                  itemsPerPageVisible="true"
                  itemsPerPageItems="2, 4, 6"/>

小于等于 0 的选项会被忽略。大于实体 最大加载数 的选项会用该值替换。

使用 itemsPerPageDefaultValue 属性设置选项的默认值:

<simplePagination dataLoader="usersDl"
                  itemsPerPageVisible="true"
                  itemsPerPageItems="2, 4, 6"
                  itemsPerPageDefaultValue="4"/>

itemsPerPageUnlimitedItemVisible 属性设置是否在每页显示数量的下拉列表中显示无限制(null)选项。默认值为 true

当在 comboBox 中选择 null 选项时,组件会尝试在当前最大加载数的限制下加载所有数据。

所有实体的最大加载数是通过 jmix.ui.default-max-fetch-size UI 属性定义。默认值为 10000。某些特定实体可能有不同的加载要求,可以用 jmix.ui.entity-max-fetch-size 设置。

XML 属性

dataLoader

dataLoader 属性为 simplePagination 连接数据。

事件和处理器

在 Jmix Studio 生成处理器桩代码时,可以使用 Jmix UI 组件面板的 Handlers 标签页或者视图类顶部面板的 Generate Handler 添加,也可以通过 CodeGenerate 菜单(Alt+Insert / Cmd+N)生成。

AfterRefreshEvent

io.jmix.flowui.component.PaginationComponent.AfterRefreshEvent 在刷新后发送。

BeforeRefreshEvent

io.jmix.flowui.component.PaginationComponent.BeforeRefreshEvent 在用户点击下一页、前一页等操作而还没有刷新数据时发送。可以通过调用 preventRefresh() 方法阻止数据容器更新。示例:

@Subscribe("simplePagination")
public void onSimplePaginationBeforeRefresh(
        final PaginationComponent.BeforeRefreshEvent<SimplePagination> event) {
    if (Objects.requireNonNull(event.getSource().getPaginationLoader()).size() > 10) (1)
        event.preventRefresh(); (2)
}
1 检查数据加载器中的实例数量。
2 阻止刷新数据。

totalCountDelegate

设置获取数据总量的代理。示例:

@Autowired
private DataManager dataManager;

@Install(to = "simplePagination", subject = "totalCountDelegate")
private Integer simplePaginationTotalCountDelegate(final LoadContext<User> loadContext) {
    return dataManager.loadValue("select count(e) from User e", Integer.class).one();
}