博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Grails中的约定
阅读量:6000 次
发布时间:2019-06-20

本文共 5893 字,大约阅读时间需要 19 分钟。

hot3.png

Grails是一个约定胜于配置的框架。以下是Grails在controller,servic,domain等方面的约定。

Controller和View的约定

  1. 所有的Controller类的命名都以Controller结尾,并放在grails-app/controllers文件夹中

  2. Controller中所有的public方法,都可以被web请求访问

  3. 在一个空的Controller中加入static scffold = true或者static scaffold = <领域类的类名>,运行时将会动态生成相应的controller脚手架和GSP页面。

  4. Controller中默认从org.codehaus.groovy.grails.plugins.web.api.ControllersApi混入超过30个方法:

    • Object bindData(Object target, Object args) (plus five variants)
    • Object chain(Map args)
    • String forward(Map params)
    • String getActionName()
    • String getActionUri()
    • ApplicationContext getApplicationContext()
    • Map getChainModel()
    • String getControllerName()
    • String getControllerUri()
    • Errors getErrors()
    • FlashScope getFlash()
    • GrailsApplication getGrailsApplication()
    • GrailsApplicationAttributes getGrailsAttributes()
    • ModelAndView getModelAndView()
    • GrailsParameterMap getParams()
    • HttpServletRequest getRequest()
    • HttpServletResponse getResponse()
    • ServletContext getServletContext()
    • HttpSession getSession()
    • String getTemplateUri(String name)
    • String getViewUri(String name)
    • GrailsWebRequest getWebRequest()
    • boolean hasErrors()
    • void header(String headerName, Object headerValue)
    • Object redirect(Map args)
    • Object render(Object o)
    • Object render(String txt)
    • Object render(Map args)
    • Object render(Closure c)
    • Object render(Map args, Closure c)
    • Object withForm(Closure callable)

    另外,void render(Converter converter)void jsonHeader(Object value)org.codehuas.groovy.grails.plugins.converts.api.ConvertersControllersApi混入。Object withFormat(Closurecallable)方法从org.codehaus.groovy.grials.plugins.web.api.ControllersMimeTypesApi混入。

  5. 如果一个controller中的action的名称,与其使用的GSP的名称相同,GSP放在相应的文件夹中,这时,你可以不用设置action对应的GSP。

    例如:

    class UserController{ 	def list(){ 		[conut: count, users: users] 	} }

    如果grails-app/views/user/文件夹中存在list.gsp,那么grails将使用list方法返回的[count:count, users: users]来渲染list.gsp。当然,你可以指定gsp页面,例如:

    def list(){ 	render(view: 'list', model: [conut: count, users: users]) }
  6. 可以从paramsmap中拿到web请求的参数,或者调用某个重载了bindData的方法

  7. GSP布局约定。在GSP的head标签中定义:<meta name='layout' content='main'>,意指使用grails-app/views/layouts/main.gsp作为该gsp页面的模板。使用的是Sitemesh模板技术。在Contoller级定义模板只需要在Controller类中设置布局属性:static layout = 'main'。全局模板定义需要在Config.groovy中定义:grails.sitemesh.default.layout = 'main',Grails默认使用grails-app/views/layouts/application.gsp作为页面的模板。只需要在相应的级别放入模板页面,Grails将自动使用该模板。

URI约定。

所有的URI规则约定配置在UrlMappings.groovy中,默认使用RESTfull风格。

Service约定。

所有的Service类约定入在grails-app/services文件夹中,名称要求以Service结尾。所有的Service的方法默认是加事务的。默认情况,所有的service都将注册为Spring的一个bean,并且是singletons的。可以在service加入属性static scope = 'session'就可以更改其范围。bean的名称就是该Service类名第一个字母小写。

Domain约定。

所有domain类都放在grails-app/domain文件夹中,doamin类所有字段默认都被持久化,不论字段访问范围(如public,private等)。类名将为表名,类中的字段名对应表中的字段名,不论类名、类中的字段名,如果是驼峰的,Grails将使用下划线+小写代替大写。

实体的实例,包括20个实例方法:

* Object attach()	* void clearErrors()	* void delete()	* void delete(Map)	* void discard()	* Errors getErrors()	* Map getProperties()	* Boolean hasErrors()	* Serializable ident()	* boolean instanceOf(Class)	* boolean isAttached()	* Object lock()	* Object merge()	* Object merge(Map)	* Object mutex(Closure)	* Object refresh()	* Object save()	* Object save(Map)	* Object save(boolean)	* BindingResult setProperties(Object)	* String toString()	* boolean validate()	* boolean validate(boolean)	* boolean validate(List)	* boolean validate(Map)

包含70个静态方法:

* static Integer count()* static Criteria createCriteria()* static void deleteAll(Object[])* static void deleteAll(Iterable)* static List executeQuery(String)* static List executeQuery(String, Collection)* static List executeQuery(String, Map)* static List executeQuery(String, Collection, Map)* static List executeQuery(String, Map, Map)* static Integer executeUpdate(String)* static Integer executeUpdate(String, Map)* static Integer executeUpdate(String, Collection)* static Integer executeUpdate(String, Collection, Map)* static Integer executeUpdate(String, Map, Map)* static boolean exists(Serializable)* static Object find(Object)* static Object find(String)* static Object find(Closure)* static Object find(Object, Map)* static Object find(String, Map)tatic Object find(String, Collection)* static Object find(String, Collection, Map)* static Object find(String, Map, Map)* static List findAll()* static List findAll(Object)* static List findAll(String)* static List findAll(Closure)* static List findAll(Object, Map)* static List findAll(String, Map)* static List findAll(String, Collection)* static List findAll(Map, Closure)* static List findAll(String, Map, Map)* static List findAll(String, Collection, Map)* static List findAllWhere(Map)* static List findAllWhere(Map, Map)* static Object findOrCreateWhere(Map)* static Object findOrSaveWhere(Map)* static Object findWhere(Map)* static Object findWhere(Map, Map)* static Object first()* static Object first(String)* static Object first(Map)* static Object get(Serializable)* static List getAll()* static Integer getCount()* static PersistentEntity getGormPersistentEntity()* static Map getValidationErrorsMap()* static Map getValidationSkipMap()* static Object last()* static Object last(String)* static Object last(Map)* static List list()* static List list(Map)* static Object load(Serializable)* static Object lock(Serializable)* static Object merge(Object)* static Object proxy(Serializable)* static Object read(Serializable)* static List saveAll(Iterable)* static List saveAll(Object[])* static DetachedCriteria where(Closure)* static DetachedCriteria whereAny(Closure)* static DetachedCriteria whereLazy(Closure)* static Object withCriteria(Closure)* static Object withCriteria(Map, Closure)* static Object withDatastoreSession(Closure)* static Object withNewSession(Closure)* static Object withNewTransaction(Closure)* static Object withSession(Closure)* static Object withTransaction(Closure)static Object withTransaction(Closure)* static Object withTransaction(TransactionDefinition, Closure)

转载于:https://my.oschina.net/zjzhai/blog/187246

你可能感兴趣的文章
ECChop出现Strict Standards: Redefining already defined constructor错误
查看>>
Maven学习总结(七)——eclipse中使用Maven创建Web项目
查看>>
大型网站技术架构(一)大型网站架构演化
查看>>
我的Git忽略文件
查看>>
oracle rman 丢失controlfile spfile 恢复
查看>>
工具集
查看>>
互不侵犯King
查看>>
自建yum仓库并安装软件包
查看>>
docker使用总结
查看>>
HTML设计网页中的字体的问题
查看>>
Kafka及场景应用(中1)
查看>>
我还是图样啊
查看>>
用PHP读取和编写XML DOM4
查看>>
第三方支付接口现号,第三方支付接口对接,第三方支付接口申请
查看>>
charles使用指南
查看>>
Ext JS 6开发实例(一)
查看>>
python random模块的详细讲解
查看>>
python3.5.0+ipython-5.0.0安装时遇到的问题
查看>>
简单的模拟实现string
查看>>
Java小程序分析
查看>>