@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:
DirectDataProvider2.png (image/png)
DirectDataProvider3.png (image/png)
DataSetDataProvider.PNG (image/png)