qiezi的学习园地

AS/C/C++/D/Java/JS/Python/Ruby

  C++博客 :: 首页 :: 新随笔 ::  ::  :: 管理 ::
简单测试了一下,语法比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比较好。
posted on 2006-04-07 16:59 qiezi 阅读(225) 评论(0)  编辑 收藏 引用 所属分类: Ruby