查询参数
DataProvider前端向后端发出ajax请求的时候,不可避免的会有一些查询条件的设置。
基本使用方法
我们分前端和后端分别加以说明。
前端(JavaScript)
//dsBranch和dsDept都是DataSet对象
var branch = dsBranch.getData();
dsDept.setParameter("branchId", branch.get("id"));
dsDept.flushAsync();//触发后端的DataProvider方法查询数据
我们通过DataSet的parameter属性设置查询参数,并调用DataSet的flushAsync方法触发后端的DataProvider方法进行数据查询。
后端(Java)
@DataProvider
public Collection<Dept> getDeptsByBranchId(String branchId) throws Exception {
return depttDao.getDeptsByBranchId(branchId);
}
在DataProvider方法中我们通过一个String类型的branchId获取前端传入的查询条件branchId。
多个查询条件
在前面的例子中,查询条件只有一个,比较简单,如果查询条件不止一个参数,那么我们可以用一个JSON定义:
//dsBranch和dsDept都是DataSet对象
var branch = dsBranch.getData();
dsDept.setParameter({
"branchId": branch.get("id"),
"branchName": branch.get("name")
});
dsDept.flushAsync();//触发后端的DataProvider方法查询数据
多个参数 对应的Java端的处理代码:
@DataProvider
public Collection<Dept> getDeptsByBranchId(String branchId, String branchName) {
return depttDao.getDeptsByBranchId(branchId, branchName);
}
在编写Java后端代码处理的时候,我们只要保证对应的参数名一致就可以。 Map参数 如果参数特别多情况下,我们也可以在Java端直接使用Map接收数据:
@DataProvider
public Collection<Dept> getDeptsByBranchId(Map<String, Object> parameters) throws Exception {
String branchId = (String)parameters.get("branchId");
String branchName = (String)parameters.get("branchName");
return productDao.getDeptsByBranchId(branchId, branchName);
}
对象参数 如果我们觉得上述的多个参数在服务端用Map接收参数的编程方式不好的话,也可以改用对象参数接收。 为了实现对象参数接收,我们首先需要在dorado的model文件中定义一个全局的DataType: 注意设置matchType属性对应为你需要的Java对象。 之后在客户端上传参数的时候,你只要添加一个$dataType属性指定为Branch就可以:
//dsBranch和dsDept都是DataSet对象
var branch = dsBranch.getData();
dsDept.setParameter({
$dataType : "Branch",//设置json的$dataType属性
"id": branch.get("id"),
"name": branch.get("name")
});
dsDept.flushAsync();//触发后端的DataProvider方法查询数据
客户端设置了$dataType属性后上传到服务器端dorado引擎查找匹配的DataProvider方法的时候,就会自动在全局的model配置文件中查找匹配的DataType,并且将相关数据自动转换为对应DataType配置好的matchType属性对应Java类的实例中,本例就是Branch.java对象。 这样我们的DataProvider端的Java代码就可以改写为:
@DataProvider
public Collection<Dept> getDeptsByBranchId(Branch branch) throws Exception {
String branchId = branch.getId();
String branchName = branch.getName();
return productDao.getDeptsByBranchId(branchId, branchName);
}
通过上述方法我们就可以多参数查询对象化的处理。
参数类型处理
查询参数除了String类型自然还有其它的数据类型,DataProvider的查询也是支持的,例如:
//dsCategory, dsProduct都是DataSet对象
var category = dsCategory.getData();
dsProduct.setParameter("categoryId": category.get("id"));
dsProduct.flushAsync();//触发后端的DataProvider方法查询数据
对应的Java端的处理代码:
@DataProvider
public Collection<Product> getProductsByCategoryId(Long categoryId) {
return productDao.getProductsByCategoryId(categoryId);
}
```# 查询参数# 查询参数
更多建议: