簡單測試了一下,語法比ruby稍羅嗦一點,不過也算是很簡潔了。
在WINDOWS下執行,遇到個小BUG,grails.bat第4行:if "%GRAILS_HOME"=="" goto grailsHomeNotSet是錯誤的,改成if "%GRAILS_HOME%"=="" goto grailsHomeNotSet就可以了。后面也有點小問題,干脆在LINUX下測試。
照著Quick Start做了一下,還算順利,不過例子怎么只給了個list呢?怎么也得把create/update/delete給完成嘛。
猜著寫了個create:
????????@Property?create?=?{
????????????????[?post?:?new?Post()?]
????????}
????????@Property?save?=?{
????????????????new?Post(params).save()
????????????????redirect(action:list)
????????}
怎么存進去的不是我那個字符串,而是[Ljava.lang.String;@18b5a73呢。。
又看了下文檔,在controller里面是這么用的:
????????@Property?save?=?{
????????????????def?post?=?new?Post()
????????????????post.properties?=?params
????????????????post.save()
????????????????redirect(action:list)
????????}
其它都很相似:
class?PostController?{
????????@Property?index?=?{?redirect(action:list)?}
????????@Property?list?=?{
????????????????[?postList?:?Post.list()?]
????????}
????????@Property?create?=?{
????????????????[?post?:?new?Post()?]
????????}
????????@Property?save?=?{
????????????????def?post?=?new?Post()
????????????????post.properties?=?params
????????????????post.save()
????????????????redirect(action:list)
????????}
????????@Property?show?=?{
????????????????[?post?:?Post.get(params['id'])?]
????????}
????????@Property?delete?=?{
????????????????Post.get(params['id']).delete()
????????????????redirect(action:list)
????????}
????????@Property?edit?=?{
????????????????[?post?:?Post.get(params['id'])?]
????????}
????????@Property?update?=?{
????????????????def?post?=?Post.get(params['id'])
????????????????post.properties?=?params
????????????????post.save()
????????????????redirect(action:list)
????????}
}
語法上比RoR稍麻煩點。
接著測試一下查詢:
????????@Property?list?=?{
????????????????def?title?=?params['title']
????????????????def?body?=?params['body']
????????????????def?postList
????????????????def?c?=?Post.createCriteria()
????????????????//if?(title?!=?null?&&?title?!=?""?&&?body?!=?null?&&?body?!=?"")
????????????????if?(title?&&?body)
????????????????????????postList?=?c{
????????????????????????????????like("title",?"%"?+?title?+?"%")
????????????????????????????????like("body",?"%"?+?body?+?"%")
????????????????????????}
????????????????else?if?(title)
????????????????????????postList?=?c{
????????????????????????????????like("title",?"%"?+?+?title?+?"%")
????????????????????????}
????????????????else?if?(body)
????????????????????????postList?=?c{
????????????????????????????????like("body",?"%"?+?body?+?"%")
????????????????????????}
????????????????else
????????????????????????postList?=?Post.list()
????????????????[?postList?:?postList,?post?:?new?Post()?]
????????}
list.gsp里面添加:
???????????<g:form?action="list"?method="post">
???????????????<div?class="dialog">
????????????????<table>
????????????????????<tr?class='prop'>
??? ??? ??? ??? ??? ??? <td?valign='top'?style='text-align:left;'?width='20%'>
??? ??? ??? ??? ??? ??? ??? <label?for='title'>Title:</label>
??? ??? ??? ??? ??? ??? </td>
??? ??? ??? ??? ???? ??? <td?valign='top'?style='text-align:left;'?width='80%'
??? ??? ??? ??? ??? ??? ??? class='${hasErrors(bean:post,field:'title','errors')}'>
??? ??? ??? ??? ??? ??? ??? <input?type='text'?name='title'?value='${post?.title}'?/>
??? ??? ??? ??? ??? ??? </td>
??? ??? ??? ??? ??? </tr>
????????????????????<tr?class='prop'>
??? ??? ??? ??? ??? ??? <td?valign='top'?style='text-align:left;'?width='20%'>
??? ??? ??? ??? ??? ??? ??? <label?for='body'>Body:</label>
??? ??? ??? ??? ??? ??? </td>
??? ??? ??? ??? ??? ??? <td?valign='top'?style='text-align:left;'?width='80%'
??? ??? ??? ??? ??? ??? ??? class='${hasErrors(bean:post,field:'body','errors')}'>
??? ??? ??? ??? ??? ??? ??? <input?type='text'?name='body'?value='${post?.body}'?/>
??? ??? ??? ??? ??? ??? </td>
??? ??? ??? ??? ??? </tr>
?????????????? </table>
???????????????</div>
???????????????<div?class="buttons">
?????????????????????<span?class="formButton">
????????????????????????<input?type="submit"?value="Search"></input>
?????????????????????</span>
???????????????</div>
???????????</g:form>
groovy寫代碼挺煩的,局部變量也要def來定義?不定義就提示該變量不是對象的字段,跟很多腳本語言都不一樣。如果從java上轉過來,會覺得還是挺簡潔的。
借助spring、hibernate,Grails所做的就是整合,groovy這個語言好像并沒有特別出眾的地方,大部分東西在其它腳本語言里面都能看到。我覺得ruby更容易擴充,更自由。Grails要想成功,除非在效率上大幅度領先,就測試來看,并沒有覺得很快,它也沒提供個評測工具。據說ruby2.0也要重寫虛擬機,如果ruby只是稍慢一些,自然還是選RoR比較好。