您好,欢迎访问三七文档
1配置grails属性首先要配置好jdkGRAILS_HOMEgrails文件夹得路径D:\grails-1.2.0\grails-1.2.0文件路径自己决定Path系统变量%GRAILS_HOME%\bin;如果安装了jdk的话,并且classpath中添加的jdk的rt.jar那个属性,用cmd运行grailshelp时候会报错,出现异常,sercuityexception,也许是因为grails的和jdk的默认不一样,解决办法是将classpath中的rt.jar属性去掉在classpath中添加.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar居然grails没报错也许是没有rt的那个属性吧书上说的是%JAVA_HOME%\jre\lib\rt.jar;.;这样的grails中文网站手册:文件是几何画板文件,不能脱离几何画板应用程序运行,所以在Flash中无法直接打开GSP文件,但是可以用JTools软件来辅助调用下载地址几何画板。几何画板是人民教育出版社向中学师生推荐使用的动态几何工具,适用于数学、平面几何、物理的矢量分析、作图,函数作图,半天学会,五分钟完成一个课件。几何画板文件名为“.gsp”和“.gss”。前者是几何画板“绘图文件”,后者是“记录文件”。这两个文件都必须在几何画板环境下才能打开。2了解Grails对快速程序开发的支持主要来自于它对“规约重于配置”这个理念的贯彻(这是RubyonRails所宣扬的“固执软件(OpinionatedSoftware)”模式的一个主要部分)。Grails项目结构(下图3-1)仰仗“规约”,为程序的各个部分建立了合理的组织结构。racetrack+grails-app+conf配置设置,包括开发、测试和产品的数据源+hibernate可选的Hibernate配置文件+spring可选的Spring配置文件+controllers控制器+domain领域类+i18n国际化资源绑定信息+servicesService类(在Grails里等同于本地SessionBean)+taglib标签库+views视图模板(还有一个所有控制器共用的而准备的子目录)+layouts布局模板(所有控制器都可以使用)+test单元测试+lib需要的jar文件(IntellijIdea里面看不见此目录,如果需要添加jar,只需要用IntellijIdea将jar导入到类路径中即可)+src+groovyGroovy源文件(除了控制器、领域类、或者是service类之外的文件)+javaJava源文件+web-app+css样式表文件+images图像文件+jsJavaScript文件和第三方库(例如Prototype、Yahoo等)+WEB-INF与部署相关的配置文件+index.gsp应用程序的首页3创建第一个项目的时候出现了异常在进入cmd的时候,是先写的grailshelp出现一堆属性,然后用命令创建一个工程Grailscreate-app这时候出现的错误异常把这个cmd窗口关掉,重新开启,这次直接创建项目,grailscreate-app就没事了或者直接将c盘中的缓存删除掉4关闭程序用ctrl+c运行是在项目的文件夹下grailsrun-app创建了领域类后,grailscreate-domain-classracetrack他是在\racetrack\grails-app\domain里面打开文件用编辑器为领域类创建一个控制器grailscreate-controllerrace控制器的文件在\racetrack\grails-app\controllers文件夹下控制器类classRaceController{defscaffold=Race}那是什么啊?!事实上,那就是我们想要得CRUD(添加-读取-修改-删除)功能。当Grails在控制器中碰到scaffold属性时,它会动态地为特定的领域类生成控制逻辑以及必要的视图,而所有的这些都来自于那一行代码!5Cof文件夹下的datasource文件注意,dbCreate属性的值为“update”表示当数据库定义和领域类不匹配时,这个值指示Grails在运行期改变你的数据库定义,让它可以跟你的领域类同步。因为我们现在还没有任何数据库表,Grails会在下次重启程序时为我们的领域类创建相应的数据库表。让Grails帮我们处理数据库定义是快速程序开发的又一次体现,这可以提高我们的生产效率。当然,有些情况下我们要面对已存在的数据库,或者我们只是想自己来管理数据库。Grails也支持这种方式,你只要很简单地删除dbCreate这个属性,Grails就不会去动数据库定义了。6声明约束属性Grails的约束属性(constraints)声明了我们对领域类属性的期望值。我们可以用约束属性来声明一个特定属性不能超过某个长度;限制一个列表的元素数目;要求一个保存邮件地址的属性必须遵循有效的E-mail地址语法结构等等。我们用Groovy闭包来在领域类里定义这些约束。闭包所用的Builder语法简单而清晰。我们从Race领域类开始吧,在Race.groovy里添加如下所示的闭包。classRace{//...staticconstraints={//一些约束条件name(maxLength:50,blank:false)startDateTime(min:newDate())city(maxLength:30,blank:false)state(inList:['GA','NC','SC','VA'],blank:false)distance(min:3.1f,max:100f)cost(min:0f,max:999.99f)}}7一个异常在.grails下删除自己的那个项目文件重新来原来是自己的一个cost(min:0f,max:999.99f)中的999,99了使用逗号了应该为.点号8在写控制器的时候注意输入控制器的名字的时候:race不用写成raceController否则会变成raceControllerController9自定义错误信息,需要在racetrack/grailsapp/i18n/messages.properties里面添加race.name.blank=pleaseenteranameforthisrace10端口使用-Dserver.port来制定端口Grails–Dserver.port-8090run-app11搜索部分有错误验证部分没有像文档上面的一样12一些知识点控制器主要用来完成对web请求的处理修改控制器的内容能够在页面显示出来defworld={render”hello”}控制器完成后,使用run-app命令来启动内置的jetty服务器默认是在8080端口在浏览器中刚进入的简介页面是由web-app/index.gsp显示的,在上面可以看见创建的控制器,点击后显示helloworld!字样---------------并未实现,404错误解决办法---先开始写成这样的,有indexdefworld={renderHelloWorld!}defindex={}应该把index删掉defworld={renderHelloWorld!}13脚手架---生成整个应用程序的骨架,通过使用generate-*命令完成使用generate-all命令根据领域模型生成控制器及其相应的视图Generate-allbookConf/confi.groovy配置文件用来完成一半的通常配置,非常类似java属性properties文件在写domain-class的时候是不必写;(分号)的,写了也可以不错一旦你有一个domain类可通过shell和console操纵它grailsconsole这将会为你载入一个可以输入groovy命令的交互式图形界面14CRUD操作createreadupdatedelete创建Defsave={Defrace=newRace()Race.properties=paramsIf(race.save()){Redirect(action:show,id:race.id)}Else{Render(view:’create’,model:[race:race])}}读取Defp=Person.get(1)Assert1=p.id更新Defupdate={Defrace=Race.get(params.id)If(race){Race.properties=paramsIf(race.save()){Flash.message=”${params.name}updated.”Redirect(action:show,id:race.id)}Else{Render(view:’edit’,model:[race:race])}}Else{Flash.message=”Racenotfoundwithid${params.id}”Redirect(action:edit,id:params.id)}}删除Defp=Person.get(1)p.delete()每个属性映射到数据库中的一个列,列名的规则命名规则是全部小写并用下划线分隔如releaseDate-------release—Date15关联一对一Classface{nosenose}classnose{}单向关联Classface{nosenose}classnose{faceface}双向关联---不能级联更新Classface{nosenose}classnose{staticbelongsTo=[face:face]}—双向关联—级联更新newface(nose:newnose()).save()可以,而newnose(face:newface()).save()错误一对多Classauthor{statichasMany=[books:book]Stringname}Classbook{Stringtitle}Grails在数据库级别讲默认使用外键映射来影射这种关联多对多两方都定义hasmany并在关联的被拥有方定义belongsToClassbook{staticbelongsTo=authorstatichasmany=[authors:author]Stringtitle}Class{statichasmany=[books:book]Stringname}16大部分属性都是默认必要的,如果想把某个属性定义为可选的,就要把它加入列表里面StringpostalAddressStringgenderStaticoptional=[“postalAddress”,”gender”]17ClassRaceController{defscaffold=Race}当grails控制器中碰到scaffold属性时,它会动态地为特定的领域类生成控制逻辑以及必要的视图,而所有的这些都来自于defscaffold=race代码18都写好了之后启动项目,却发现只有id而没有其他属性奇怪,从新写了一个后部署运行就没事了,不知道原来的什么毛病,也许是controller类用grailsgenerate-all自己创建的,不行吧自己创建了controllerbookauthor两个后,在用命令generate-all命令来19没有显示书的名字重写book中的tostring方法StringtoString(){“${this.name}”}20常用约束Staticconstraints={name(maxLength:50,blank:false)time(min:newDate())time2(validator:{return(itnewDate())
本文标题:grails-问题
链接地址:https://www.777doc.com/doc-5833933 .html