1、在Eclipse下构建Grails项目1、 下载安装JDK 1.5或者更高版本,下载安装Grails2、 创建 .bat 文件,文件:set JAVA_HOME=C:Javajdk1.6.0_13set GROOVY_HOME=E:2Ggroovy-1.6.3set path=%JAVA_HOME%/bin;%GROOVY_HOME%/bin;%path%cmd在控制台下输入 grails help,如果能看到 Grails 的命令列表,Grails 的安装配置就算成功了。图 3. 检验 Grails 是否安装成功 3、 创建一个 Grails 应用程序创建 Grails 应用程序需要使用 g
2、rails create-app 命令,在控制台输入: grails create-app ContactGrails 会为我们创建一个名叫“Contact”文件夹,并在其中生成一个应用程序框架,生成的应用程序目录结构如下:表 1. Contact 应用文件目录结构Contact+ grails-app+ conf 存放配置信息,包含数据源、应用程序启动时自动执行的类ApplicationBootStrap.groovy, Url 映射配置+ controller 存放控制器(“MVC”的“C”)+ domain 存放域类(“MVC”的“M“)+ i18n 存放国际化资源文件+ service
3、s 存放 service 类+ taglib 存放标签库类+ views 存放视图模版(“MVC”的 V,每个控制器对应一个文件夹并存放在Views 中,每个文件夹中会有多个 GSP 页面)+ layouts 存放布局模板+ grails-tests 存放测试代码+ hibernate 存放可选的其它 Hibernate 配置文件+ lib 存放其它 Jar 包(如 JDBC 驱动等)+ spring 存放可选的 Spring 配置文件+ src+ java 存放 Java 源程序+ groovy 存放 Groovy 源程序+ web-app+ css 存放 CSS 样式表+ images 存
4、放图片文件+ js 存放 JavaScript 文件+ WEB-INF 存放部署相关的文件+ index.gsp 应用程序的首页从上述目录结构可以看出 Grails 的“约定优于配置”设计理念,它约定了不同层次代码存放的位置以及项目的组织方式,这既提供了一种最佳实践,同时也节省了开发人员配置项目的精力。添加 Domain Class接下来,为刚创建好的项目添加一些功能。首先创建两个 Domain Class。前面说过,DomainClass 实质上是数据库表映射的实体类。通过控制台,进入项目的根文件夹(注意:本文出现一切的控制台输入,除 create-app 外,都需要在项目文件夹中执行),输
5、入 grails create-domain-class Team 图 4. 创建 Domain Class新创建的 Domain 类出现在了 grails-app/domain 文件夹中,同时 Grails 还创建了相应的 Test类。用记事本打开 grails-appdomain 文件夹中的 Team.groovy,加入如下内容:class Team String teamNameDate foundDate这两行代码描述了 Team 所包含的属性,从代码中可以看出 Groovy 语言的一些特点:1. 无需“;”结尾(有“;”也不会报错);2. 简单数据类型,与 Java 相同;创建 Co
6、ntroller接下来为 Domain Class Team 类创建 Controller,在控制台输入 grails create-controller TeamGrails 会在 grails-app/controller 中创建一个名为 TeamController 的类。编辑TeamController.groovy 文件。加入如下代码: class TeamController def scaffold = Team不要小看这仅有的一行代码,它使 Team 表有了相应的 CRUD(增、删、查、改)功能的页面。在控制台中输入 grails run-app,运行应用以查看效果:图 5.
7、Team list page图 6. Show Team page图 7. Edit team page一些疑问前面的例子演示了如何使用 Grails 快速开发一个应用。如果使用 Struts 之类的 Java Web 框架开发一个类似上述的功能可能要花几个小时的时间,而使用 Grails 只用了不到五分钟可以完成了创建。对 Grails 的“快”您应该有了一个比较直观的感受了吧?虽然现在程序已经实现了对 Team 表的 CRUD 操作,但读者可能会有如下的几个疑问:1. 数据库在哪?2. 如何修改页面的外观?3. URL 与 Controller 的对应关系是什么?4. 表单能做验证吗?配置
8、数据库实现了 CRUD,为什么没有配置数据库呢?Grails 为用户提供的一个内置的轻量级数据库 hsqldb,虽然在性能和功能上难以满足要求,但是对于演示 scaffold 还是绰绰有余的。当然,我们可以用 MySQL 去替换它,下面就来演示这个过程(如果读者不想使用 MySQL 去替换 hsqldb,可以跳过下面的内容)。首先修改 grails-appconfDataSource.groovy:dataSource pooled = falsedriverClassName = com.mysql.jdbc.Driverusername = rootpassword = *hibernat
9、e cache.use_second_level_cache=truecache.use_query_cache=truecache.provider_class=org.hibernate.cache.EhCacheProvider/ environment specific settingsenvironments development dataSource dbCreate = update / one of create, create-drop,updateurl = jdbc:mysql:/localhost:3306/Contact_devtest dataSource dbC
10、reate = updateurl = jdbc:mysql:/localhost:3306/Contact_testproduction dataSource dbCreate = updateurl = jdbc:mysql:/localhost:3306/Contact_prodGrails 默认要求提供三个数据库,分别用于开发、测试和产品环境。修改连接的 Driver名称、用户名密码以及三个数据库的URL,保存。接下来分别创建上述三个数据库,并把 MySQL 的JDBC 驱动程序拷贝到 lib 文件夹中。接下来,重新运行项目(grails run-app),Grails 会自动为 Do
11、main Class 创建相应的数据库表。至此,Team 的 CRUD 程序就运行在 MySQL 之上了。修改页面外观使用 scaffold 实现的 CRUD 实际上并没有创建 GSP 页面,所以无法定制 View 内容。在 Grails中,可以使用 grails generate-all 命令为指定的 Domain Class 创建实现 CRUD 操作的Controller 和 View。所以,在控制台运行(如果提示 TeamController 已存在,是否覆盖?请选是): grails generate-all TeamGrails 会在 grails-appviews 目录中创建一个名
12、叫 team 的文件夹,文件夹的名称刚好和controller 一一对应。team 文件夹中包含了 4 个 GSP 文件,分别是 create.gsp、list.gsp、edit.gsp 和 show.gsp。这几个页面和之前 scaffold 实现的功能是一致的。修改这几个页面的代码,即可以定制页面的外观。URL 与 Controller 的命名约定打开 generate-all 命令产生的 Controller 即 TeamController.groovy 文件,可以看到如下内容:class TeamController def index = redirect(action:list,
13、params:params) / the delete, save and update actions only accept POST requestsdef allowedMethods = delete:POST, save:POST, update:POSTdef list = if(!params.max) params.max = 10 teamList: Team.list( params ) def show = team : Team.get( params.id ) 其中 def xxx = xxx 的结构在 Groovy 语言中叫闭包(Closure),在 Contro
14、ller 中,每个闭包对应为一个 Action,即处理一个特定的 Web 请求。然后看看 Grails URL 的命名原则:http(s):/host:pot/ProjectName/ControllerName/ActionName/Parameters表单的验证Grails 对表单的验证提供了强大的支持,可以使用 Domain Class 的验证来实现表单的验证。修改 Team.groovy 文件:class Team String teamNameDate foundDatestatic constraints = teamName(size:3.50,blank:false,uniqu
15、e:true)在 Team 类中加入个名叫 constraints 的静态 Closure,并在其中描述验证逻辑:team 的字符串长度在 350 之间、不能为空、而且是唯一的。(注意早期版本的 Grails 使用 length 限定字符串的长度,在 V0.5 以后改为了 size保存 Team.groovy,重新运行 Contact,会发现验证逻辑已经可以工作了:图 8. 表单验证但验证失败后报出的错误信息对用户来说并不友好。想要修改这些内容,需要编辑 grailsappi18n 中的资源文件使用 Grails 快速开发 Web 应用程序使用 Eclipse 搭建开发环境下面主要介绍 Gro
16、ovy 插件的安装方法:首先启动 Eclipse,点击 Help Software Updates Find and Install:图 9. 更新和安装在弹出窗口中选择 Search for new features to install 点击 Next:图 10. 查找新特性然后在新窗口中点击 New Remote Site.,并在弹出窗口中输入:Name: GroovyURL: http:/dist.codehaus.org/groovy/distributions/updateDev/图 11. 添加 Classpath Variables然后还需要禁用 Groovy 插件的 Clas
17、s auto generate 的功能,在 Contact 上 右键 Properties Groovy Project properties 选择 Disable Groovy Compiler Generating class Files 点击OK:* 这里注意导入项目后在项目中禁用Disable Groovy Compiler Generating class Files可能会导致项目报一个Spring文件的错误,如果报错暂时先不禁用该功能,之后可在Eclipse的Window中禁用该功能* 图 12. 禁用 Class auto generate接下来,配置使 Web tools 能够
18、编辑 GSP。打开 Windows Preference General Editors File Associations,添加 *.gsp,并关联到 JSP Editor 即可:图 13. 将 gsp 关联到 JSP Editor然后设置 Content Types:Windows Preference General Content Types, 为 JSP 类型文件添加扩展名 *.gsp:图 14. 为 JSP 类型文件添加扩展名 *.gsp至此,开发环境配置完毕。Grails 已经为 Eclipse 创建了描述运行的文件,点击 Run OpenRun Dialog。图 15. 运行可
19、以在 Java Application 下看到名为 Contact 的运行项目。选择并点击 Run 按扭。但 Grails 提供的 run 脚本目前还存在 bug,运行时可能会抛出如下异常:java.lang.IllegalArgumentException: Variable $tools.jar in groovy-starter.confreferences a non-existent System property!Try passing the property to the VM using -Dtools.jar=myValue因此最后还需要修改 Contact 的运行参数,加
20、入:-Dtools.jar=%JAVA_HOME%libtools.jar图 16. 修改 Contact 运行参数现在,可以在 Eclipse 下运行和调试 Grails 程序了。* 此时如果遇到:groovy.lang.MissingMethodException: No signature of method: groovy.util.ConfigSlurper.parse() is applicable for argument types: (DataSource) values: %7BDataSource.错误。则确认一下是否已经禁用Groovy 插件的 Class auto generate ,以及删除项目目录下的所有class文件。*
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1