我正在尝试为我的数据制作一个过滤器,以便其他人可以看到它,假设我有一堆事件,比如日历,我希望看到所有名称或标题都带有“足球” ”。 我一直试图弄清楚如何做到这一点,但没有什么对我有用,我也试图使用filterPane插件,但没有很好的工作,我更喜欢自己写一些东西,也许可以上传到Grails插件网页以备将来使用参考文献,
非常感谢任何帮助。
答案 0 :(得分:4)
如果是在域类中,请尝试:
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 /中创建一个名为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')
}
和
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>
所以,现在把它们放在一起:
作为免责声明,我正在堆栈溢出文本编辑器中动态编写此代码,因此如果我错过了一些语法问题,我不会感到惊讶。希望这个解释足以让你顺利上路。现在让我们谈谈采用这个基本的例子并将其提升到一个更可敬的解决方案。
我建议您在掌握这个基本示例之后尝试执行以下操作:
如果您正努力让上述解决方案发挥作用,请尝试进一步简化它。消除日期搜索,只按标题搜索。将searchResults操作中的所有条件逻辑替换为:
def results = Entry.findByTitleILike(params?.title)
开始简单并改进,你马上就能掌握它。
祝你好运!
答案 1 :(得分:1)
您可以通过示例查询或使用findAllWhere,如果您只需要按相等性过滤。否则,您将需要使用条件构建器来生成相应的查询。
答案 2 :(得分:1)
filter插件似乎符合您的要求。