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

grails的mvc相关功能

程序员文章站 2022-03-14 12:49:25
...
grails的Domain Class/*.gsp(或者*.jsp)/Controller是一个典型的MVC框架。

可能gsp让一些人感到陌生,在我看来可以把gsp看做一个模板,类似于velocity或者freemarker之类的东西。所有的标签其实是一个特定渲染动作。毫无疑问,目前他并没有多少可选的输出,他运用的是spring的MVC结构,当然可能不如webwork来得强大。

模板的include功能还是比较强的,可以使用类似于“<g:render template="/modulename/abc" />”之类的语句来进行include,当然,在/view/modulename下面必须有"_abc.gsp"这样的文件存在。  而且可以给这个render提供数据 <g:render template="/modulename/abc" collection="${books}" />或者bean="${book}" 等,说到底,他还是一个修饰数据的模板。可以使用这个功能来包含我们的top,bottom,left等。

在controller中,比较重要的功能是Action Interceptors(Action拦截器),这也是rails的重要功能。譬如这样一段action代码:
def beforeInterceptor = [action:this.&auth,except:'login']
// defined as a regular method so its private
def auth() {
     if(!session.user) {
            redirect(action:'login')
            return false
     }
}
def login = {
     // display login page
}

注意这段语句:def beforeInterceptor = [action:this.&auth,except:'login']

就是一个典型的login拦截器,这样在调用其他action之前,会调用auth这个action闭包,如果返回false,那么action将不会被执行。从而重定向到login这个action。同样我们的拦截器可以指定except,这个属性实际上是指定拦截的范围,这里是排除拦截login这个action,否则将会使用户无法登陆。

其他的功能也都很有用,不过比较简单,详细的可以看http://docs.codehaus.org/display/GRAILS/Controllers,有request数据绑定,fileupload,action chain,domain object dynamic method等。grails也提供中文首页,地址是http://docs.codehaus.org/display/GRAILS/Chinese-Home,不过很多东西都还没有中文文档,只能我们自己去看英文文档。

关于MVC中的Model(Domain class)可以参考GORM,这个东西地层是Hibernate的,非常的简单实用,被Hiberante搞昏了的同志可以看看这个,GORM中只提供1:1,1:m这两种数据关联,可以单向也可以双向,非常的简单,个人认为n:m这种数据关联应该避免使用,这种数据关联结构将会使应用变得低效和复杂,如果需要多对多的关联,那么可以自己写java的类和hbm文件。