首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

精通 Grails 了解插件(1)

精通 Grails 了解插件(1)

何为插件?老练的 Java™ 开发人员都是一些精明的探寻者和收集者。他们从不梦想着去编写自已的日志库;而是简单地把 log4j JAR 放入其类路径。需要一个 XML 解析器吗?那好,将 Xerces JAR 添加到您的项目中即可。这些可插入的功能块是面向对象编程的可重用性的一种体现。
Grails 插件可服务于同样的目的,不过,规模更大。它们可以包括很多 JAR 及 GroovyServer Page (GSP)、控制器、TagLib、服务等。就像 SiteMesh 将两个 GSP 合并成一个一样,插件可以将两个或多个 Grails 应用程序合并成一个。这样您就可以将更多的精力用于核心业务需求,在需要的时候,从外部资源加入所需的额外功能 — 查询、认证、备用表示层等。
此外,插件实质上也是外部 资源。虽然 Grails 开发团队已经编写了一些有价值的插件,但绝大多数插件仍来自于社区。实际上,Grails 团队一直致力于在适当的时候将其核心功能整合进插件,这就使得 Grails 自身在每次发布的时候都更小也更为稳定。
那么如何将其应用到 Blogito — 您在本系列中逐步构建的这个 “小型博客” 应用程序中呢?假设您想添加的下一个功能是本地搜索功能。并且您愿意采用一个现有的解决方案而不是从头构建一个您自已的搜索基础架构,那么请往下看。
安装一个搜索插件这个搜索插件能为您的应用程序带来类似 Google 那样的搜索能力。它使用 Apache Lucene 创建索引,用 Compass 将索引钩挂到 Grails Object Relational Mapping (GORM)/Hibernate 生命周期(参见 )。这就意味着每当您创建、更新或删除一个 domain 类时,Lucene 索引都会相应更新。
要想安装此插件,请键入 grails install-plugin searchable。(下一章节将会深入介绍安装插件时的技术细节。)
接下来,将这行代码 — static searchable = true — 添加到 grails-app/domain/Entry.groovy,如清单 2 所示:
清单 2. 让 Entry 类成为可查询的
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class Entry {
  static searchable = true

  static constraints = {
    title()
    summary(maxSize:1000)
    filename(blank:true, nullable:true)
    dateCreated()
    lastUpdated()
  }

  static mapping = {
    sort "lastUpdated":"desc"
  }

  static belongsTo = [author:User]

  String title
  String summary
  String filename
  Date dateCreated
  Date lastUpdated
}




请注意:必须要显式地让 domain 类变成可搜索的。这意味着您可以继续将基础架构数据,比如登录和密码,保存在隐藏的 User 类中。(关于可搜索主题的在线文档提供了有关如何指定哪些类和字段可被包括到索引中的更多信息;请参见 。)
有了这一行代码,就为 Blogito 赋予了 Lucene 和 Compass 的强大功能。键入 grails run-app,启动这个应用程序,然后访问 http://localhost:9090/blogito/searchable。键入一个搜索关键词,比如 grails,看一下搜索结果,如图 1 所示:
图 1. 默认的搜索结果虽然搜索出一些结果,但结果不容易描述。要解决这个问题,可以为 Entry.groovy 添加一个 toString() 方法,如清单 3 所示:
清单 3. 为 Entry 添加一个 toString()
1
2
3
4
5
6
7
8
9
class Entry {
  static searchable = true

  //snip

  String toString(){
    "${title} (${lastUpdated})"
  }
}




再次搜索 grails 。这次的结果的用户友好性会有所提高,如图 2 所示:
图 2. 用 toString() 方法得到的搜索结果这个可搜索插件的原始功能已经就绪,现在可以采取下一个步骤了:将它深入地集成到您的应用程序内。
返回列表