Grails 从1.2.x 到1.3.x的改进

 

 

本文是对Grails 1.2.x 至 1.3.7版本之间主要的新特性做了一个汇总,以便于学习和查阅。如果有新版本发布,还会持续更新。

 

参考文档:http://grails.org/Release+Notes

 

 

 

 

框架、配置等

------------------------------------------

 

可以重新加载预编译的GSP,包括i18n也会重新加载。

在Config.groovy中设置:

grails.gsp.reload.enable = true

 

处于性能原因,建议在生产环境中关闭config.groovy中的grails.logging.jul.usebridge参数。

 

 

全局应用程序布局(config.groovy中):

grails.sitemesh.default.layout='myLayoutName'
 

 

可以在resource.groovy中直接访问应用程序的实例,比如:

import grails.util.*
beans = {
    if (application.config.my.company.mockService) {
        myBean(my.company.mock.MockImpl) {
            bookService = ref("bookService")
        }   
    } else {
        myBean(my.company.MyBeanImpl) {
            bookService = ref("bookService")
        }
    }
}
 

 

可以在BuildConfig.groovy中设置Tomca JVM的参数:

grails.tomcat.jvmArgs = ["-Xmx1024m", "-XX:MaxPermSize=256m"]
 

 

 

通过run-script运行多个Groovy脚本:

grails run-script [path-to-script-1] [path-to-script-2]...[path-to-script-n]
 

 

 

出于安全考虑,Grails日志信息可以用以下配置排除记录请求参数中的敏感信息:

grails.exceptionresolver.params.exclude = ['password', 'creditCard']
 

或者干脆通过配置grails.exceptionresolver.logRequestParameters参数禁止日志记录请求参数。

grails.exceptionresolver.logRequestParameters = false
 

 

 

 

视图、Web标签

------------------------------------------

link标签可以支持attr属性:

<link:accountDetails attrs="[class: 'fancy']" acctNumber="8675309">Show Account</link:accountDetails>

  结果是

<a href="/details/8675309" class="fancy">Show Account</a>

 

 

新的标签unless,与if标签类似:

<g:unless test="${cacheEnabled}">
  Tag Body Goes Here
</g:unless>

 

新的join标签:

<g:join in="['Grails', 'Groovy', 'Gradle']" delimiter="_"/>

结果是:

Grails_Groovy_Gradle
 

 

 

 

 

GORM

------------------------------------------

 

GORM支持beforeValidate

 

class Person {
   String

 name
   static

 constraints = {
       name size: 5..45
   }

def beforeValidate() { name = name?.trim() }

}
 

查询支持排序:

Person.recentPublications.list(sort: 'title', order: 'desc', ignoreCase: true)
 

.find方法和.findAll方法支持查询缓存:

def musicians = Musician.find('from Musician where name = :name', [name: 'Brian'], [cache: true])

Book.findAll("from Book as b where b.author=:author"





, [author:'Dan Brown'], [cache: true





])
 

 

新的方法检查脏数据(对象是否改变)

def airport = Airport.get(10)
assert !airport.isDirty()

airport.properties = params if (airport.isDirty()) { // do something based on changed state }

 包括检查单独的域(字段)

def airport = Airport.get(10)
assert !airport.isDirty()

airport.properties = params if (airport.isDirty('name')) { // do something based on changed name }
 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值