数据组件

数据组件是界面的不可见元素,提供加载数据、绑定数据到数据感知可视化组件以及将数据保存至数据存储的功能。有以下类型数据组件:

通常,数据组件在界面 XML 描述的 <data> 元素定义:

<data readOnly="true">
    <collection id="departmentsDc"
                class="ui.ex1.entity.Department">
        <fetchPlan extends="_base">
            <property name="employees" fetchPlan="_base"/>
        </fetchPlan>
        <loader id="departmentsDl">
            <query>
                <![CDATA[select e from uiex1_Department e]]>
                <condition>
                    <c:jpql>
                        <c:where>e.name like :name</c:where>
                    </c:jpql>
                </condition>
            </query>

        </loader>
        <collection id="employeesDc" property="employees"/>
    </collection>
</data>

数据组件可以与可视化组件以相同的方式注入到控制器中:

@Autowired
private CollectionLoader<Department> departmentsDl;

private String departmentName;

@Subscribe
public void onBeforeShow(BeforeShowEvent event) {
    departmentsDl.setParameter("name", departmentName);
    departmentsDl.load();
}

特定界面的数据组件注册在 ScreenData 对象中,这个对象跟控制器关联,可以通过控制器的 getScreenData() 方法获取。这个对象在需要加载界面所有的数据的时候很有用,示例:

@Subscribe
public void onAfterShow(AfterShowEvent event) {
    getScreenData().loadAll();
}
使用 DataLoadCoordinator facet 以声明式的方式将数据加载器和数据容器、可视化组件、界面事件进行关联。除非在需要设置一些加载参数的时候,才使用编程的方法,如 下面 例子所示。