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文件。
可能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文件。
上一篇: window下怎么重启MySQl服务?
下一篇: java的Arrays工具类实战
推荐阅读