欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Groovy on Rails 0.1发布 博客分类: 杂七杂八 GroovyRailsGrailsRubyBean 

程序员文章站 2024-03-20 11:37:46
...
简单测试了一下,语法比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比较好。