我有一堆数据,需要使用 Grails 进行数据过滤器

2023-11-29

我正在尝试为我的数据创建一个过滤器,以便其他人可以看到它,假设我有一堆事件,例如日历,并且我想查看所有名称或标题带有“足球”一词的事件。 我一直在试图弄清楚如何做到这一点,但对我来说没有任何作用,我也尝试使用filterPane插件,但效果不太好,我更喜欢自己写一些东西,也许将其上传到Grails插件网页以供将来使用参考,

任何帮助将不胜感激。


如果它在域类中,请尝试:

def matches = Book.findAllByTitleLike("wonderful")

如果您不想担心大写/小写:

def matches = Book.findAllByTitleILike("wonderful")

如果您的书名在集合中:

def books = ['Wonderful Tonight', 'Atlas Shrugged', 'A Tale of Two Cities']
def matches = books.findAll{it.indexOf("wonderful") > -1} // returns []
matches = books.findAll{it.indexOf("Wonderful") > -1} // returns ['Wonderful Tonight']
matches = books.findAll{it.toLowerCase().indexOf("wonderful") > -1} // returns ['Wonderful Tonight']

Update:

现在我们对您的问题有了更完整的描述,让我们找出解决问题的简化方法。

今天,您想要按事件标题及其日期进行搜索,因此我们将从这里开始,然后看看如何概括这一点并在未来制定更完整的解决方案。

我们的一般流程将是这样的:

  1. 您向用户显示一个搜索表单
  2. 用户输入日期和/或标题进行搜索并提交表格
  3. 您找到匹配的条目
  4. 您向用户显示匹配的条目

首先,让我们为搜索表单创建一个视图,在 grails-app/views/entry/ 中创建一个名为 search.gsp 的文件,其中包含以下内容:

<g:form controller='entry' action='searchResults'>
   Entry Title: <g:textField name="title" value="${title}" />
   Entry Date: <g:datePicker name="day" value="${day}" precision="day" />
   <g:submitButton name="submit" value="Search" />
</g:form>

接下来,我们将创建控制器。在 grails-app/controllers/ 中创建一个新的控制器 EntryController.groovy。如果您还没有创建 EntryController,则可以通过执行“grails create-controller Entry”来完成此操作。

现在,我们将创建两个控制器闭包:

def search = {
  render(view:'search')
}

and

def searchResults = {
  def entryCriteria = Entry.createCriteria()
  def results = entryCriteria.list {
    if(params?.title) {
      ilike{"title","%${params.title}%"
    }
    if(params?.day) {
      eq("eventDate", params.day)
    }
  }
  render(view:'searchResults', model:['results':results])
}

最后,让我们在 grails-app/views/entry 中创建一个 searchResults.gsp

<h1>Results</h1>
<g:each in=${results}>
  ${it}
</g:each>

所以,现在把它们放在一起:

  1. 运行您的应用程序并转到 localhost:8080/${appName}/entry/search,这应该会显示您的搜索表单。
  2. 输入标题和/或日期,提交表单,这应该将您的表单数据发送到控制器中的 searchResults 闭包中
  3. 关闭中的条件搜索将找到与您的搜索条件匹配的所有条目
  4. 您渲染搜索结果视图并向其传递您的匹配条目,然后在 gsp 上我们循环遍历每个结果并显示它。

作为免责声明,我是在堆栈溢出文本编辑器中即时编写此代码的,因此如果我遗漏了一些语法问题,我不会感到惊讶。希望这个解释足以让您上路。现在我们来谈谈这个基本示例并将其完善为更受人尊敬的解决方案。

我建议您在掌握这个基本示例后尝试执行以下操作:

  1. 尝试构建一个命令对象来表示您的搜索表单,它将允许您验证用户的输入,并且比像我上面那样直接处理请求参数是一种更易于管理的方法。
  2. 为您的命令对象和控制器流程构建一些单元测试;检查是否正在为您的各种验证填充错误消息。
  3. 采用我们在 searchResults 闭包中定义的条件搜索,并将其移至单独的 Grails 服务,将命令搜索对象传递给该服务以获取结果。然后,如果您稍后在应用程序中的其他位置需要该搜索功能,则可以重复使用该搜索功能。
  4. 为您的服务构建一些单元测试;模拟 Entry 域对象并验证您的搜索功能是否正常工作。

如果您很难使上述解决方案发挥作用,请尝试进一步简化它。消除日期搜索,只需按标题搜索。将 searchResults 操作中的所有条件逻辑替换为:

def results = Entry.findByTitleILike(params?.title)

从简单的开始并不断改进,您很快就会掌握它的窍门。

祝你好运!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我有一堆数据,需要使用 Grails 进行数据过滤器 的相关文章

随机推荐