Grails小技巧
一、Controlller中params
Controlller中params是grails框架中的GrailsParameterMap类,继承自TypeConvertingMap,而不是一个简单的Map,
除了支持普通的Map方法以外,还有其他几个方法非常有用
Integer int(String name);
Long long(String name);
Double double(String name);
Short(String name);
List list(String name);
若需要得到数值类型的参数就非常方便了
int max= params.int("max")?:10;
二、分页
其实使用Grails做分页功能是最easy的事情,因为Domain类的Criteria的list方法返回的结果就是带有分页所用信息的PagedResultList类
Domain的动态方法会检查是否调用的是list方法,若是则会使用Hibernate Criteria.setProjection(Projections.rowCount())方法,根据条件查询总数。想深入了解可以看看
HibernateCriteriaBuilder.java源码。
public class HibernatePluginSupport {
private static addQueryMethods(GrailsDomainClass dc, GrailsApplication application, ApplicationContext ctx) {
...;
metaClass.static.createCriteria = {-> new HibernateCriteriaBuilder(domainClassType, sessionFactory)}
...;
}
}
//groovy 动态机制
public class HibernateCriteriaBuilder {
public Object invokeMethod(String name, Object obj){
createCriteriaInstance();
// 检查分页参数,一个参数是Map,包含分页参数
if(name.equals(LIST_CALL) && args.length == 2) {
paginationEnabledList = true;
orderEntries = new ArrayList<Order>();
invokeClosureNode(args[1]);
} else {
invokeClosureNode(args[0]);
}
...
if(paginationEnabledList) {
this.criteria.setFirstResult(0);
this.criteria.setMaxResults(Integer.MAX_VALUE);
this.criteria.setProjection(Projections.rowCount());
int totalCount = ((Integer)this.criteria.uniqueResult()).intValue();
// Drop the projection, add settings for the pagination parameters,
// and then execute the query.
this.criteria.setProjection(null);
for(Iterator<Order> it = orderEntries.iterator();it.hasNext();){
this.criteria.addOrder(it.next());
}
this.criteria.setResultTransformer(CriteriaSpecification.ROOT_ENTITY);
GrailsHibernateUtil.populateArgumentsForCriteria(targetClass, this.criteria, (Map)args[0]);
PagedResultList pagedRes = new PagedResultList(this.criteria.list());
// Updated the paged results with the total number of records
// calculated previously.
pagedRes.setTotalCount(totalCount);
result = pagedRes;
}
}
}
PagedResultList类除了实现List接口外,添加了totalCount属性即记录总数,然后view层max和offset参数来控制分页就可以了,非常的方便
//params已有order、sort、max、offset的分页排序信息
params.max = Math.min(params.int('max') ?: 15, 100)
def criteria = CellPhoneModel.createCriteria();
def pageList = criteria.list(params, {
if(params['factory.id'])
factory {
eq("id",params.long('factory.id'))
}
if(params.keyword)
like("abbreviateName","%${params.keyword}%")
});
等有空再说说Grails Security结合Named URL Mappings功能简化Requestmap配置的问题
分享到:
相关推荐
### Groovy轻松入门——Grails实战基础篇...在后续的文章中,作者还将进一步介绍Grails的高级用法和技巧,帮助读者更深入地了解Grails的各个方面。如果你对Grails感兴趣,不妨跟着作者的步伐一起探索这个强大的框架吧!
在Grails框架中,文件的上传与下载是常见的功能需求,尤其在开发涉及大量文档、图片或媒体文件处理的应用程序时。以下是对Grails中上传和下载...熟练掌握这些技巧,对于提升Web应用程序的功能性和用户体验至关重要。
- **获取实用技巧和资源**:收集有用的提示、陷阱以及进一步学习的资源。 #### 三、开始步骤 1. **安装Grails**:首先确保已经成功安装了Grails框架。 2. **安装Dojo**: - 最佳做法是从[Dojo Toolkit官网]...
本书由Dave Klein与Ben Klein共同编写,通过一个逐步迭代的小项目来介绍Grails的核心概念和技术。读者将跟随作者的步伐,在友好的指导下构建一个完整的Grails应用程序。 #### 书籍评价 多位业界专家对本书给予了...
以上内容涵盖了《Grails Persistence with GORM and GSQL》一书中的一些核心概念和实践技巧。通过这些章节的学习,读者能够全面地理解如何在Grails框架中利用GORM来管理和操作数据。无论是初学者还是有经验的开发者...
**Grails 框架与性能测试** Grails 是一个基于 Groovy 语言的开源 Web 应用开发框架,它采用 MVC(Model-View-...通过深入学习 CSS 和性能测试技巧,开发者可以构建出高效、响应式的 Web 应用程序,提升用户的满意度。
这个插件借鉴了禅宗中的“公案”概念,将学习过程转化为解决具体问题的小挑战,从而加深对Grails框架的理解。 **什么是Grails?** Grails 是一个基于Groovy语言的开源Web应用框架,它构建在Java平台上,旨在简化...
这一部分提供了许多实用的Groovy编程小贴士和技巧,帮助开发者提升编程效率和代码质量。 #### 单元测试与Groovy 单元测试是软件开发不可或缺的一部分,Groovy提供了强大的单元测试框架,这部分内容介绍了如何利用...
这可能体现在使用轻量级容器,如Grails或Play Framework,或者在数据库访问上采用NoSQL技术,以降低资源消耗。轻量化设计不仅有助于提升性能,还能降低系统的运维成本。 四、源码分析与学习 SMART系统提供的源码是...
编程技巧精选集].罗斌.扫描版-.pdf │ [Visual.C.视频技术方案宝典].明日科技宋坤,刘锐宁,马文强.扫描版-.pdf │ [Visual.C.音频.视频处理技术及工程实践].路锦正,周冬梅.扫描版-.pdf │ [VisualC.视频会议开发技术...
在IT行业中,Groovy是一种强大的、动态的编程语言,它主要应用于Java Virtual Machine (JVM) 上。...通过分析和学习"Experience2"项目,我们可以提升对Groovy的理解,更好地掌握这种语言在实际开发中的运用技巧。