如何将多个值传递给也与其他参数对应的参数?

时间:2014-10-31 17:49:29

标签: hibernate grails criteria url-parameters

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

简单示例 - 每个

的单个值

http://localhost/myapp/search? filtertype=status&filterterm=pending

复杂示例 - 多个值 -

http://localhost/myapp/search? filtertype=status&filtertype=color&filterterm=pending&filterterm=red

我可以使用params.list("filtertype")&amp ;;将这些值作为列表获取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..这不能很好地扩展。我需要一个可以很好地扩展到多个值的解决方案。

1 个答案:

答案 0 :(得分:1)

您是否尝试过这样的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])
    }
  }
}