Grails中的約定

jopen 10年前發布 | 22K 次閱讀 Grails Groovy Java開發

Grails是一個約定勝于配置的框架。以下是Grails在controller,servic,domain等方面的約定。

Controller和View的約定

  1. 所有的Controller類的命名都以Controller結尾,并放在grails-app/controllers文件夾中

    </li>

  2. Controller中所有的public方法,都可以被web請求訪問

    </li>

  3. 在一個空的Controller中加入static scffold = true或者static scaffold = <領域類的類名>,運行時將會動態生成相應的controller腳手架和GSP頁面。

    </li>

  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)
    • </ul>

      另外,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混入。

      </li>

    • 如果一個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])
      
      }
    • 可以從paramsmap中拿到web請求的參數,或者調用某個重載了bindData的方法

    • 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)
 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!