我有一堆数据,我需要一个使用Grails的数据过滤器

我有一堆数据,我需要一个使用Grails的数据过滤器,grails,plugins,groovy,filter,Grails,Plugins,Groovy,Filter,我正在尝试为我的数据制作一个过滤器,以便其他人可以看到它,比如说我有一系列的事件,比如日历,我想看到所有有名称或标题并带有“足球”字样的事件。 我一直在想怎么做,但没什么效果,我也尝试过使用filterPane插件,但效果不太好,我更喜欢自己写一些东西,可能会上传到Grails插件网页供将来参考 如果您需要任何帮助,我们将不胜感激。您可以通过示例进行查询,如果您只需要按相等进行筛选,则可以使用findAllWhere。否则,您需要使用条件生成器生成相应的查询。如果查询位于域类中,请尝试: def

我正在尝试为我的数据制作一个过滤器,以便其他人可以看到它,比如说我有一系列的事件,比如日历,我想看到所有有名称或标题并带有“足球”字样的事件。 我一直在想怎么做,但没什么效果,我也尝试过使用filterPane插件,但效果不太好,我更喜欢自己写一些东西,可能会上传到Grails插件网页供将来参考


如果您需要任何帮助,我们将不胜感激。

您可以通过示例进行查询,如果您只需要按相等进行筛选,则可以使用findAllWhere。否则,您需要使用条件生成器生成相应的查询。

如果查询位于域类中,请尝试:

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']
更新:

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

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

我们的总体流程如下所示:

  • 向用户显示搜索表单
  • 用户输入日期和/或标题以搜索并提交表单
  • 您可以找到匹配的条目
  • 将匹配的条目显示给用户
  • 首先,让我们在grails app/views/entry/create一个名为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/views/entry中创建一个searchResults.gsp

    <h1>Results</h1>
    <g:each in=${results}>
      ${it}
    </g:each>
    
    从简单开始,不断改进,你很快就会掌握窍门


    祝你好运

    该插件似乎满足了您的要求。

    哦,我希望您不必为过滤器将多个域类连接在一起,因为这可能会非常棘手。;)我只有一个主要的课程条目,findAllWhere听起来不错。这不也会过滤描述吗??我不需要过滤描述,只需要根据事件的标题。findAllWhere也能工作吗?findAllWhere方法听起来不适合您的情况。它只在您可能需要某种形式的类似查询的地方查找精确匹配。在您的情况下,我建议您阅读grails用户指南中的createCriteria方法。我更新了信息,使之专门针对我的项目。我只有一个名为Entry的主域类,所以我想它应该是def matches=Entry.findallbyttlelike(“Soccer”),我把这段代码放在哪里?用什么方法?那我怎么称呼它才能让过滤器工作呢??我还需要过滤活动将要发生的日期,比如说我想看看6月23日到27日之间发生的所有活动。再次感谢!!我希望你能帮助我!另一张海报提到了过滤器插件,不幸的是,我还没有足够的代表直接对此发表评论。:-)我会暂时避免这一次,它似乎处于衰变状态,上一次活动是在2009年2月,所以在这一点上它似乎已经死了。我添加了一个更新来更好地解释…Proflux:我做了你说的一切,当我在search.gsp中查找一个单词时,它会给我一个错误:“错误处理GroovyPageView:Tag[each]缺少所需的属性[in]”。你知道发生了什么事以及如何解决吗?我要感谢你,你帮了我大忙!此外,结果应更新表格并显示在同一表格中。所以这个表应该更新为searchResults,对吧?哎呀,看起来我忘记了g:each标记中的一些引号。将in=${results}更改为in=“${results}”。我尝试了它,但它似乎不起作用。。。或者我做错了什么,但是我按照页面上的说明做了与他们在示例中做的相同的事情,这给了我一个错误
    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])
    }
    
    <h1>Results</h1>
    <g:each in=${results}>
      ${it}
    </g:each>
    
    def results = Entry.findByTitleILike(params?.title)