genericFilter 通用过滤器

genericFilter 组件是一个可对数据进行过滤的多功能工具。

这个组件支持按照任意条件对数据进行 快速过滤,同时也支持创建可重复使用的过滤器配置。

  • XML 元素:genericFilter

  • Java 类:GenericFilter

基本用法

genericFilter 需要连接到一个独立的 CollectionContainerKeyValueCollectionContainer 中定义的数据加载器。过滤器生成一个 Condition 对象,后续加载器使用这个条件从 数据存储 加载数据。对于 JPA 实体,数据存储会修改生成的 JPQL 查询语句,因此数据过滤是在数据库级别完成的,从数据库仅加载了过滤后的数据至应用程序内存。

默认情况下,实体的 列表视图 会自动添加 genericFilter 组件。

在 XML 描述中声明 genericFilter 的例子如下:

<data>
    <collection id="customerDc" class="com.company.onboarding.entity.Customer">
        <fetchPlan extends="_base">
        </fetchPlan>
        <loader id="customerDl">
            <query>
                <![CDATA[select c from Customer c]]>
            </query>
        </loader>
    </collection>
</data>
<layout>
    <genericFilter id="genericFilter" dataLoader="customerDl">
        <properties include=".*"/>
    </genericFilter>
    <dataGrid id="customersTable"
              width="100%"
              dataContainer="customerDc">
        <columns>
            <column property="level"/>
            <column property="age"/>
            <column property="hobby"/>
            <column property="firstName"/>
            <column property="lastName"/>
            <column property="rewardPoints"/>
        </columns>
    </dataGrid>
</layout>

上面例子中,数据容器包含了 Customer 实体实例的集合。数据加载用 JPQL 查询语句加载集合。genericFilter 组件通过 dataLoader 属性连接至数据加载器。数据通过与数据容器连接的 dataGrid 组件展示。

一个典型的过滤器是这样的:

generic filter anatomy
  1. 带下拉框的 Refresh(刷新) 按钮

  2. 比较操作符选择器。

  3. Filter Settings(过滤器设置) 按钮。

  4. 保存的过滤器和配置列表。

  5. 条件的值字段。

  6. Add search condition(添加搜索条件) 链接按钮。

默认情况下,这个组件使用快速过滤模式。用户可以添加一组过滤条件进行一次数据搜索,一旦关闭视图,设置的过滤条件也就没了。

快速过滤示例

假设我们有 Customer 实体,并想实现下列功能:

  • Customer 列表视图创建多条件的快速过滤器。

  • 保存该过滤器以便将来使用。

创建快速过滤

generic filter quick

保存过滤器

之后,过滤器会保存并展示在 Refresh(刷新) 按钮的下拉列表中。

generic filter refresh

<Reset filter>(重置过滤器) 菜单项可以用来重置当前已应用的搜索条件。