Dorado 7 : 03. DataProvider和DataResolver(SEFC)

@DataProvider和@DataResolver

在实做CRUD范例中对应的两个Java方法中涉及到的两个特殊标签,我们没有细讲,代码如下:

@DataProvider
public Collection<Product> getAll() {
	return productDao.getAll();
}

@DataResolver
@Transactional
public void saveAll(Collection<Product> products) {
	productDao.persistEntities(products);
}

其中@DataProvider和@DataResolver是Dorado专门提供的两个标记,与之实做AJAX文章中前提到的@Expose相似,@DataProvider和@DataResolver会动将当前方法对应的服务,根据一系列约定的规则,在运行时注册成全局的DataProvider和DataResolver放在DataProviderManager的对象中。
通常情况下我们所说的DataProvider和DataResolver并不是简单的表示某个具体的方法。而是两种Dorado7中特有的对象。这两个对象一般情况下我们并不需要专门声明,通过annotation定义就会自动的创建,如果我们还希望手工的定义DataProvider或DataResolver。也可以直接利用IDE在.model.xml文件或当前.view.xml的Model节点下定义。如下图:

我们选择了model节点后,可以看到三个DataProvider对象:

  • DirectDataProvider
  • HqlDataProvider
  • CriteriaDataProvider

我们可以在model中添加一个DirectDataProvider,并设置其interceptor属性:

这样这个Provider就知道通过interceptor拦截器去获取数据,设置好之后我们再设置DataSet的dataProvider为这个自定义的dataProvider:

而利用annotation处理机制,DataProviderManager会自动的管理所有的DataProvider对象,当我们在DataSet的dataProvider中设置simpleCRUD#getAll的时候,它就能找到对应DataProviderManager中的DataProvider对象,并获取数据返回。

Attachments: