信息
- 评级:5星
- 版本:0.6.5
- 更新:2013-10-02
- 适用:Grails2.3 > *
如果想使用Grails2.2 > *,则需要使用0.6.4版本,0.6.5只支持Grails2.3 > *版本
摘要
给Grails中增加全文检索功能,这个插件建立在Compass和Lucene之上。建议Java版本为1.5 > *
安装
<!-- lang:groovy -->
grails install-plugin searchable
or
compile ":searchable:0.6.4"
应用
- 增加一个domain,并开启search的检索功能
Book.groovy
<!-- lang:groovy -->
package com.example
class Book {
static Searchable = true
String title
Integer pages
String toString(){
title
}
static constraints = {
}
}
- 使用generate-all生成book对象的controller和view代码
- 在BookController中增加search闭包,根据过滤条件搜索数据
BookController.groovy
<!-- lang:groovy -->
def search = {
def bookList
def searchResult
if(params.query) {
searchResult = Book.search(params.query)
bookList = searchResult.results
} else
bookList = Book.list()
render(view:'list',model:[bookList:bookList,searchResult:searchResult,query:params.query])
}
- 在view中的list.gsp中table标签前面增加一个查询框,用来输入查询条件
list.gsp
<!-- lang:groovy -->
<div class="nav">
<g:form name="search" action='search'>
Search:<input type="text" name="query" value="${query}"/>
<input type="submit" value="Search"/>
</g:form>
</div>
- 当使用过滤条件后,查询出来的记录和不带过滤条件查询出来的数据不一样,所以需要重写分页
list.gsp
<!-- lang:groovy -->
<div class="pagination">
<g:if test="${searchResult}">
<g:paginate total="${searchResult.total}" params="[query:query]" />
</g:if>
<g:else>
<g:paginate total="${Book.count()}" />
</g:else>
</div>
- 使用generate-all生成的BookList实例使用的名称为bookInstance,因为共用了list数据显示,所以需要修改成一致,顺便加点初始化数据
BookController.groovy
<!-- lang:groovy -->
def list(Integer max) {
if(!Book.list()) {
new Book(title:'java',pages:234).save()
new Book(title:'grails',pages:234).save()
new Book(title:'groovy',pages:234).save()
new Book(title:'ruby',pages:254).save()
new Book(title:'.net',pages:433).save()
}
params.max = Math.min(max ?: 10, 100)
[bookList: Book.list(params), bookListTotal: Book.count()]
}
- 页面调用也修改一下
list.gsp
<!-- lang:groovy -->
<g:each in="${bookList}" status="i" var="bookInstance">
......
</g:each>
参考
- 插件地址