高级搜索功能
来源:互联网 发布:音色鉴定软件 编辑:程序博客网 时间:2024/04/30 10:35
本节中,我们将增加一个对 Member 进行搜索的功能,可以对 Member 的姓名、所在 Team 的名称、性别,进行搜索。如果用户输入的任何一个查询条件为空,则该条件不作为查询条件。
首先实现页面表单。表单并不复杂,只有三个表单项,(可以拷贝 create 页面的代码,然后在上面作修改)代码如下:
<g:form controller="member" method="post" action="search" >
Team Name: <input type="text" id='teamName' name='teamName'/>
Name: <input type="text" id='name' name='name'/>
Gender:
<g:select id='gender' name='gender' from=' ${[""] +
new Member().constraints.gender.inList.collect{it.encodeAsHTML()}}' >
</g:select>
<input type="submit" value="search"/>
</g:form>
这里 Gender 的下拉框也有一个小技巧。new Member().constraints.gender.inList.collect{it.encodeAsHTML()}
会返回数组 ['M', 'F']
。由于存在着 Gender 选项可以为空的需求,于是用空数组 [""]
与之相加,得到新的数组 ['','M','F']
。从而使下拉框中有三个备选项,第一个为空,另外两个分别是‘M’和‘F’。
显然,这个表单和数据库中没有直接对应的表,所以不能使用 Domain Class 来直接接收表单。但可以使用 params 来接收,也可以用Command Object。本文我们使用 Command Object。首先修改创建的文件SearchMemberCommand.groovy(存放在 src/groovy 下),编辑内容如下:
class SearchMemberCommand {
String teamName
String name
String gender
}
接下来开发Controller 的 Action,考虑需求,共有三个查询条件,来自两张不同的表,且仅当该条件不为空时可用。这样的复合查询如果使用传统的拼SQL 的方法实现,需要编写很多代码,但如果使用 Hibernate 的 Criteria,代码会变得很简单而且比较优雅。Grails提供了一个针对 Hibernate Criteria 的 Builder,由它构造的查询代码,更加优雅,也更加小巧精悍。
这里摘录 search
Action 的代码:
def search = {
//使 Action 获取了页面表单提交的查询条件
SearchMemberCommand searchCmd ->
//如果 request 的请求方式是 POST,则进行查询,否则会输出查询表单
if(request.method == "POST") {
def criteria = Member.createCriteria() //创建了一个 Hibernate 的 Criteria 查询
def resultList = criteria{
and { //所有条件之间是与的关系
//如果 searchCmd.name 不为空,则加入条件
if(searchCmd.name)
like ('name',"%${searchCmd.name}%")
if(searchCmd.gender)
eq ('gender',"${searchCmd.gender}")
//如果 teamName 不为空,则与 team 表进行连接,并加入查询条件
if(searchCmd.teamName) {
team{
like ('teamName',"%${searchCmd.teamName}%" )
}
fetchMode('team', FetchMode.EAGER)
}
}
order("id", "asc") //加入了排序的条件,以 id 字段进行升序查询
}
render(view:"list" , model:[memberList: resultList])
}
}
Critera 的这种查询方式简单而优雅,进一步体现了 Grails 开发的简单与快速。
- 高级搜索功能
- 页面高级搜索功能
- 百度中的高级搜索功能
- OpenCart之高级搜索功能
- web页面之搜索、高级搜索功能
- 找回淘宝的“高级搜索”功能
- Google搜索的高级功能 -- 按时间过滤搜索结果
- 利用Google高级搜索功能做SEO调研
- 利用Google高级搜索功能做SEO调研
- SQL Server 2005用存储过程实现高级搜索功能
- 利用 Lucene 实现高级搜索功能并创建web应用程序
- JQuery插件第三十三个:高级搜索下的排序功能
- 百度地图,搜索功能,地图的高级引用
- MOSS 高级搜索设置,如何过滤moss自带的功能页面
- 使用网页爬虫(高级搜索功能)搜集含关键词新浪微博数据
- 利用织梦高级搜索功能 , 来定制身份证驾驶证信息查询系统
- Ecshop模板开发(二十七):列表页筛选功能、清除筛选、高级搜索实现
- 带高级搜索、书签功能、文件菜单等功能的Hibernate 3.2 Spring 2.0的chm格式Reference
- 让ubuntu810从字符界面(命令行)登录
- 我从来不是没有梦想。。
- 使用 Grails 快速开发 Web 应用程序--Web 开发的关键要素
- 我的python开发环境
- 使用 Grails 快速开发 Web 应用程序--定制页面
- 高级搜索功能
- 为查询添加 Ajax 效果
- 登录以保护应用
- 运行与部署
- 现在的自己
- 关于 Groovy
- 数制和编码
- Groovy 初探
- ajax学习笔记---Ajax五步法