为了在我的域上进行报告,我需要通过URL传递多个参数,并传递它们的相应值。

简单示例-每个值一个
http://localhost/myapp/search? filtertype=status&filterterm=pending
复杂示例-多个值-
http://localhost/myapp/search? filtertype=status&filtertype=color&filterterm=pending&filterterm=red
我可以使用params.list("filtertype")params.list("filterterm")将这些值作为列表获取,但是这样它们之间就没有任何关联。

我的问题是如何根据这些值进行条件查询,以使我不必像下面的解决方案那样对filterterm的数组索引进行硬编码?

def filteredResults(params) {
  def filtertypes = params.list("filtertype")
  def filterterms = params.list("filterterm")

  def list = MyDomain.createCriteria().list(max: params.max?: 10, offset: params.offset?: 0) {
    if ("status" in filtertypes) {
      eq("status", filterterms[0])
    }
    if ("color" in filtertypes) {
      eq("color", filterterms[1])
    }
  }
}

请注意,在上述解决方案中,我很难对filterterms[0] etc..进行编码,因此无法很好地扩展。我需要一个可以很好地扩展到多个值的解决方案。

最佳答案

您是否尝试过使用eachWithIndex这样?

def filteredResults(params) {
  def filtertypes = params.list("filtertype")
  def filterterms = params.list("filterterm")

  def list = MyDomain.createCriteria().list(max: params.max?: 10, offset: params.offset?: 0) {
    filtertypes.eachWithIndex { ft, idx ->
      eq("${ft}", filterterms[idx])
    }
  }
}

关于hibernate - 如何将多个值传递给也与其他参数相对应的参数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26680627/

10-10 06:26