【问题标题】:Grails search/filter multiple parameters - controller logicGrails 搜索/过滤多个参数 - 控制器逻辑
【发布时间】:2014-05-28 05:42:30
【问题描述】:

使用 Grails(或休眠),我想知道在实现域搜索时是否应该使用特定的设计模式或方法。

例如,在我的网站上,我希望能够按域中的多个属性进行过滤(或搜索)。

EG:因为我有一个显示酒店列表的页面。当我提交搜索表单时,或者如果用户单击“按名称过滤='blah'”,当我进入控制器时,我会得到以下信息:

Domain
  String name
  String location

Controller
  if(params.name && params.reference) {
      // Find name/reference
  } else if(params.name) {
      // Find name
  } else if(params.reference) {
      // Find reference
  } else {
      // Find all
  }

如您所见,如果域中要搜索/过滤的属性越多,控制器获得的时间就越长。

任何帮助。请注意,我不想使用“可搜索”插件,因为这对我的需求来说太复杂了。

【问题讨论】:

    标签: search grails filtering controllers


    【解决方案1】:

    我会将这些嵌入到域类本身的a named query 中。例如:

    Class Hotel {
      String name
      String city
      String country
      boolean isNice
    
      static namedQueries = {
        customSearch { p ->
          if (p?.name) eq('name', p.name)
          if (p?.city) eq('name', p.city)
          if (p?.country) eq('name', p.country)
          if (p?.isNice != null) eq('isNice', p.isNice)
        }
      }
    }
    

    然后在某个地方的控制器中......

    def results = Hotel.customSearch(params)
    

    当然,这是一个非常简单的示例,但您可以使用相同的命名查询对其进行扩展,甚至可以添加其他查询并将它们链接在一起。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-10
      • 1970-01-01
      • 1970-01-01
      • 2020-09-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多