查询参数

2024-03-07 18:38 更新

DataProvider前端向后端发出ajax请求的时候,不可避免的会有一些查询条件的设置。

基本使用方法

我们分前端和后端分别加以说明。

前端(JavaScript)

  1. //dsBranch和dsDept都是DataSet对象
  2. var branch = dsBranch.getData();
  3. dsDept.setParameter("branchId", branch.get("id"));
  4. dsDept.flushAsync();//触发后端的DataProvider方法查询数据

我们通过DataSet的parameter属性设置查询参数,并调用DataSet的flushAsync方法触发后端的DataProvider方法进行数据查询。

后端(Java)

  1. @DataProvider
  2. public Collection<Dept> getDeptsByBranchId(String branchId) throws Exception {
  3. return depttDao.getDeptsByBranchId(branchId);
  4. }

在DataProvider方法中我们通过一个String类型的branchId获取前端传入的查询条件branchId。

多个查询条件

在前面的例子中,查询条件只有一个,比较简单,如果查询条件不止一个参数,那么我们可以用一个JSON定义:

  1. //dsBranch和dsDept都是DataSet对象
  2. var branch = dsBranch.getData();
  3. dsDept.setParameter({
  4. "branchId": branch.get("id"),
  5. "branchName": branch.get("name")
  6. });
  7. dsDept.flushAsync();//触发后端的DataProvider方法查询数据

多个参数 对应的Java端的处理代码:

  1. @DataProvider
  2. public Collection<Dept> getDeptsByBranchId(String branchId, String branchName) {
  3. return depttDao.getDeptsByBranchId(branchId, branchName);
  4. }

在编写Java后端代码处理的时候,我们只要保证对应的参数名一致就可以。 Map参数 如果参数特别多情况下,我们也可以在Java端直接使用Map接收数据:

  1. @DataProvider
  2. public Collection<Dept> getDeptsByBranchId(Map<String, Object> parameters) throws Exception {
  3. String branchId = (String)parameters.get("branchId");
  4. String branchName = (String)parameters.get("branchName");
  5. return productDao.getDeptsByBranchId(branchId, branchName);
  6. }

对象参数 如果我们觉得上述的多个参数在服务端用Map接收参数的编程方式不好的话,也可以改用对象参数接收。 为了实现对象参数接收,我们首先需要在dorado的model文件中定义一个全局的DataType: 注意设置matchType属性对应为你需要的Java对象。 之后在客户端上传参数的时候,你只要添加一个$dataType属性指定为Branch就可以:

  1. //dsBranch和dsDept都是DataSet对象
  2. var branch = dsBranch.getData();
  3. dsDept.setParameter({
  4. $dataType : "Branch",//设置json的$dataType属性
  5. "id": branch.get("id"),
  6. "name": branch.get("name")
  7. });
  8. dsDept.flushAsync();//触发后端的DataProvider方法查询数据

客户端设置了$dataType属性后上传到服务器端dorado引擎查找匹配的DataProvider方法的时候,就会自动在全局的model配置文件中查找匹配的DataType,并且将相关数据自动转换为对应DataType配置好的matchType属性对应Java类的实例中,本例就是Branch.java对象。 这样我们的DataProvider端的Java代码就可以改写为:

  1. @DataProvider
  2. public Collection<Dept> getDeptsByBranchId(Branch branch) throws Exception {
  3. String branchId = branch.getId();
  4. String branchName = branch.getName();
  5. return productDao.getDeptsByBranchId(branchId, branchName);
  6. }

通过上述方法我们就可以多参数查询对象化的处理。

参数类型处理

查询参数除了String类型自然还有其它的数据类型,DataProvider的查询也是支持的,例如:

  1. //dsCategory, dsProduct都是DataSet对象
  2. var category = dsCategory.getData();
  3. dsProduct.setParameter("categoryId": category.get("id"));
  4. dsProduct.flushAsync();//触发后端的DataProvider方法查询数据

对应的Java端的处理代码:

  1. @DataProvider
  2. public Collection<Product> getProductsByCategoryId(Long categoryId) {
  3. return productDao.getProductsByCategoryId(categoryId);
  4. }
  5. ```# 查询参数# 查询参数
以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号