grails学习总结

来源:互联网 发布:mac dock 编辑:程序博客网 时间:2024/06/07 08:21

1. Grails 利用约定优于配置 将框架的各个部分组合在一起。Grails 用命名直观的文件和目录代替了更容易出错的在外部配置文件中手工对这些链接进行归类的老方法。

2. GSP 不过是标准 HTML 加上一些提供动态内容的 Grails 标记而已。

3.应该看到完整的 BookController 类,带有名为 createeditlistshow 闭包(以及其他闭包)。还应该看到 grails-app/views/book 目录下有四个 GSP:create.gsp, edit.gsp, list.gsp, and show.gsp. 在这里起作用的是 “约定优于配置”。当访问 http://localhost:8080/zhang/book/list 时,就是要求BookController 填充域模型对象Book 的列表,并将列表传递给book/list.gsp 视图。请在文本编辑器中查看 BookController.groovy

class BookController {def list(Integer max) {    params.max = Math.min(max ?: 10, 100)    [bookInstanceList: Book.list(params), bookInstanceTotal: Book.count()]}}
这个简单的闭包从数据库中检索到 10 条Book 记录,将它们转换为 POjO,并将它们保存在名为bookInstanceListArrayList 内。list.gsp 页面随后将遍历列表,逐行构建 HTML 表格。

4. Grails标记

<g:each> 是常用的 Grails 标记。它将遍历列表中的每个 项。

<g:each in="${bookInstanceList}" status="i" var="bookInstance">   <tr class="${(i % 2) == 0 ? 'even' : 'odd'}">         <td><g:link action="show" id="${bookInstance.id}">          ${fieldValue(bean: bookInstance, field: "author")}</g:link></td>     <td>${bookInstance.name?.encodeAsHtml()}</td>     %{--<td>${fieldValue(bean: bookInstance, field: "name")}</td>--}%       <td>${fieldValue(bean: bookInstance, field: "price")}</td>      </tr></g:each>
<g:each> 标记的 status 属性是个简单的计数器字段(请注意这个值用在下一行的 ternary 语句中,用来将 CSS 样式设为evenodd)。var 属性允许命名用来保存当前项的变量。如果将名称改为foo,那么需要将后面的行改为${foo.author?.encodeAsHTML()},依次类推( ?. 操作符是 Groovy 用来避免NullPointerException 的方法。它可以快捷地表示 “只有在airline 不为 null 时才调用encodeAsHTML() 方法,否则返回空字符串”)。

${foo.author?.encodeAsHTML()}这种方式就等价于${fieldValue(bean:bookInstance,field:"name")}.

另一个常用 Grails 标记是 <g:link>。顾名思义,它的作用是构建一个 HTML <a href> 链接。当然也可以直接使用 <a href> 标记,但是这个方便的标记还接受属性,例如 actionidcontroller。如果只考虑href 的值而不考虑它前后的anchor 标记,那么可以改用<g:createLink> 。在 list.gsp 顶部能看到返回链接的第三个标记:<g:createLinkTo>。这个标记接受dirfile 属性而不是 controlleractionid 属性。例如:

[plain] view plain copy
  1. <div class="nav">  
  2.   <span class="menuButton"><a class="home" href="${createLinkTo(dir:'')}">Home</a></span>  
  3.   <span class="menuButton"><link class="create" action="create">New Book</g:link></span>  
  4. </div>  
可以交替使用两种不同的形式调用 Grails 标记 — 一种是在尖括号内包含标记,一种是仿效方法调用在大括号内包含标记。当在另一个标记的属性中调用方法时,大括号表示法(正式名称为表达式语言或 EL 语法)更合适。

<g:if>标记.

<g:if test="${flash.message}"><div class="message" role="status">${flash.message}</div></g:if>
它表示的是如果flash.message不为空,就显示它。

<g:paginate> 标记

在数据库包含的 Book 比当前显示的 10 条记录多时,显示 “前一个” 和 “下一个” 链接。

<g:sortableColume> 标记

使列标题变为可单击,从而支持排序。

另外还有<g:form> <g:submit>标记,还有很多可以参见http://blog.csdn.NET/yss19900512/article/details/47054609