Groovy&Grails-插件应用-Searchable Plugin

信息

  • 评级: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 > *

安装


grails install-plugin searchable
or
compile ":searchable:0.6.4"

应用

  • 增加一个domain,并开启search的检索功能

Book.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


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


<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


<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


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


<g:each in="${bookList}" status="i" var="bookInstance">
    ......
</g:each>

参考

  • 插件地址

你可能感兴趣的:(Groovy&Grails-插件应用-Searchable Plugin)