快速业务通道

精通Grails: 构建您的第一个Grails应用程序 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-15

Trip.delete() 从 Trip 表中删除 数据。

Trip.list() 返回一个 Trip 列表。

Trip.get() 返回一个 Trip。

所有这些方法都已经存在,您在需要的时候就可以使用它们。注意,Trip 并没有扩展某个父类或者实 现某个接口。由于 Groovy 的元编程功能,那些方法只是出现在适当类中的适当位置(只有 grails- app/domain 目录中的类才拥有这些与持久性相关的方法)。

精通Grails: 构建您的第一个Grails应用程序(3)

时间:2011-08-02 IBM Scott Davis

构建控制器和视图

创建域类只是成功的一半。每个模型都还需要一个良好的控制器和一些视图(我假设您熟悉 Model- View-Controller 模式;请参阅 参考资料)。输入 grails generate-all Trip,以构建一个 grails- app/controllers/TripController.groovy 类,并在 grails-app/views/Trip 中生成一组匹配的 Groovy Server Page(GSP)。对于控制器中的每个 list 动作,都有一个相应的 list.gsp 文件。create 动作 则对应于一个 create.gsp 文件。从这里可以看出约定优于配置的优点:无需 XML 文件就可以匹配这些 元素。每个域类根据名称与一个控制器配对。控制器中的每个动作也是根据名称与一个视图配对。如果您 愿意,也可以绕开这种基于名称的配置,但是大多数时候只需遵循约定,应用程序自然就可以运行。

看看清单 3 所示的 grails-app/controller/TripController.groovy:

清单 3. TripController

class TripController {    ...    def list = {      if(!params.max) params.max = 10      [ tripList: Trip.list( params ) ]    }    ... }

Java 开发人员首先会注意到的是,这么少的代码可以实现多少功能。以 list 动作为例。起重要作用 的是最后一行。Grails 将返回一个 hashmap,其中只有一个名为 tripList 的元素。(Groovy 方法的最 后一行是一个隐式的 return 语句。如果您愿意,也可以手动地输入单词 return)。tripList 元素是 Trip 对象的一个 ArrayList,Trip 对象是通过 Trip.list() 方法从数据库中拉出的。通常该方法将返 回表中的全部记录。它上面的一行代码表示 “如果 URL 中提供了一个 max 参数,那么使用它来限制返 回的 Trip 的数量。否则,将 Trip 的数量限制为 10”。URL http://localhost:8080/trip- planner/trip/list 将调用这个动作。例如,http://localhost:8080/trip-planner/trip/list?max=3 显示 3 个 trip,而不是通常的 10 个。如果有更多的 trip 要显示,Grails 会自动创建上一页和下一 页的分页链接。

那么,如何使用这个 hashmap?看看 grails-app/views/list.gsp,如清单 4 所示:

清单 4. list.gsp

<g:each in="${tripList}" status="i" var="trip">   <tr class="${(i % 2) == 0 ? ''odd'' : ''even''}">    <td>     <g:link action="show" id="${trip.id}">${trip.id?.encodeAsHTML()}</g:link>    </td>   </tr> </g:each>

list.gsp 主要是一些老式 HTML 加上少量 GroovyTagLib。以 g: 为前缀的就是 GroovyTag。在清单 4 中,g:each 遍历 tripList ArrayList 中的每个 Trip,并构建一个格式良好的 HTML 表格。

对控制器的理解可以归结为三个 R:return、redirect 和 render。有些动作利用隐式的 return 语 句将数据返回到具有相同名称的 GSP 页面。有些动作进行重定向。例如,如果 URL 中未指定动作,则将 调用 index:

def index = { redirect(action:list,params:params) }

在此,TripController 重定向到 list 动作,同时传递 params hashmap 中的所有的参数(或 QuerySt

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号