`

Grails开发项目中的错误及解决

阅读更多
Q: 如果有多个hasMany映射, 提示错误:
A: 需要定义在一个语句里: static hasMany = [activites:Activity,linkmen:Linkman];


--------------------------------------------------------------------------------

Q: 如果某个数据库中表没有建立起来:
A1: 一般是domain类的属性定义错误, 定义重复, 或者是属性名和Oracle的关键字重复. 比如title, user就不能作为属性名.
A2: 由于数据库的dbcreate选项用的是update, 所以有时候添加新表的时候建立不了新表. 或有些表的字段无法自动添加, 运行服务器的时候如果访问这样的表会报sql无法执行的错误, 此时需要吧config.groovy里的log4j的hibernate="off"改为hibernate="on", 这时hibernate的详细错误信息会显示在控制台上. 根据提示, 按照映射规则手工加入相应表或字段即可.


--------------------------------------------------------------------------------

Q: 在增加Acegi0.5插件后, 提示java.lang.UnsupportedClassVersionError: Bad version number in .class file :
A: 编译需要jdk1.6, 所以把构建路径的jdk更改成1.6.


--------------------------------------------------------------------------------

Q: navtive2ascii错误解决办法
A: 右键项目,点击属性 找到 Java构建路径 ,点击库--添加外部jAR 选择JDK下lib文件夹里的 tools.jar确定保存


--------------------------------------------------------------------------------

Q: Hibernate自动映射读取其他用户表的解决办法
A: 用dba进入数据库, 把crmdev的dba权限去掉, 只保留connect和resource权限.


--------------------------------------------------------------------------------

Q: 默认用户注册页面注册提示"没有默认的角色"
A: 在角色管理里建立角色user, 进入SecurityConfig.groovy, 添加defaultRole="user" .


--------------------------------------------------------------------------------

Q: 为什么在国际化资源文件message.properties里录入的中文, 编译后变成乱码?
A: 首先在属性里确定此文件的编码是utf-8, 如果不是请改成utf-8, 然后用Eclipse编辑器打开此文件, 用Properties界面添加/编辑此文件, 而不要用Source界面编辑. Source界面编辑后的文件经过native2ascii转换后再用Properties界面看就是乱码了.


--------------------------------------------------------------------------------

Q: 为什么页面上显示乱码?
A1: Eclipse所有自动生成的GSP文件默认编码都是ISO-8859-1, 在编辑前一定要手动改成UTF-8编码.


--------------------------------------------------------------------------------

Q: 为什么GSP页面的按钮国际化后不好使了,提示404错误?
A: 因为按钮如果不指定action, 默认的提交action和value相同, 但是因为value改成了中文, 所以action找不到了. 解决方法是在actionSubmit里显式指定action, 比如action="edit".


--------------------------------------------------------------------------------

Q: 为什么建立的角色在用户编辑的时候选不了?
A: 在保存用户的时候要判断角色的名称里包含"ROLE", 所以建立角色的时候请加"ROLE_"前缀.acegi插件自动生成的代码是这样判断的.


--------------------------------------------------------------------------------

Q: 怎么把数据库字段默认设置成可为空?
A: nullable可以使gorm建表时把字段设置成允许null.


--------------------------------------------------------------------------------

Q: 一个视图内不同Domain的字段重名, 导致绑定params出错怎么办?
A: 最好的做法是在设计Domain时在字段前面加Domain名字的前缀, 这样就可以保证字段不重名了.


--------------------------------------------------------------------------------

Q: 为什么GSP页面报空指针错误?
A: 这个原因可能很多, 但主要是因为某个属性写错了或没加"?"判断, 首先一定要看清是哪个页面, 因为有些保存页面后会调用Show.gsp. 这时不要一直在Create.Gsp找. 其次一般自动生成的代码是没有问题的, 主要看自己填写的代码. 比如添加了delete的message的参数, 如果从别的地方拷贝过来, 很可能参数没有改, 导致报错.


--------------------------------------------------------------------------------

Q: Null value was assigned to a property of primitive type setter 错误的解决方法?
A: 如果遇到这个错误: Null value was assigned to a property of primitive type setter ,hibernate int型数据无法读取 hiberante读int 整型数据出错 hiberante读数据库出错 解决方法: 把Domain里相应字段从int改为Integer.
.


--------------------------------------------------------------------------------

Q: 为什么Gsp页面Create画面在提交返回校验错误信息后, 关联表的信息都没有了?
A: 比如, 新建Linkman里有Customer的id, 但是在提交后返回"电话不能为空"后, Customer的信息就没有了. 这个产生的原因没有弄清楚提交循环. 在Controller 的Save闭包里, 如果提交有错误, 程序会执行else分支的内容, 返回提交页面, 此时若不把Customer信息读取并返回页面, 就会产生这个问题, 具体实例代码如下:

def save = {
        def customerInstance = Customer.get(params['customer.id'])
        def linkmanInstance = new Linkman(params)
        linkmanInstance.customer=customerInstance
        if(!linkmanInstance.hasErrors() && linkmanInstance.save()) {
            flash.message = "Linkman ${linkmanInstance.id} created"
            redirect(action:show,id:linkmanInstance.id)
        }
        else {
            render(view:'create',model:[linkmanInstance:linkmanInstance,customerInstance:customerInstance])
        }
    }

--------------------------------------------------------------------------------

Q: 有没有必须使用flush的时候?为什么我向数据库添加时提示:java.lang.NullPointerException: Cannot invoke method XXXMethod() on null object?
A: 这是一个问题, 前一个对象没有真正存到数据库里, 导致后面读取使用这个对象时出错. 所以在存这个对象时, 要flush一下, 即立即执行. 下面是一个例子:

其中的大写单词都是自定义常量

  if(!Role.findByAuthority(BASE_ADMIN_ROLE)){
             //这里是个需要立即提交的例子,如果这里不提交,下面建立用户时会找不到这个权限, 从而导致出错
             (new Role(authority:BASE_ADMIN_ROLE,description:BASE_ADMIN_ROLE)).save(flush:true)
         
         }
         if(!UserInfo.findByUsername(BASE_ADMIN)){
             def password = authenticateService.encodePassword(BASE_ADMIN)
             def baseAdmin = new UserInfo(username:BASE_ADMIN,userRealName:BASE_ADMIN,
                 passwd:password,enabled:true,email:"admin@abc.com.cn").save()
             Role.findByAuthority(BASE_ADMIN_ROLE).addToPeople(baseAdmin);
         }

--------------------------------------------------------------------------------

Q: 为什么我在Service层里添加代码后在Controller里调用不好使?
A: Service层代码调用是需要先实例化的, 比如IndexController调用UserInfoService, 需要在IndexController里先声明def userInfoService. 这时Spring会自动装配. 然后在需要的地方调用userInfoService.getCurrentUser(session). 另外说明一点, session是需要传过去的. 不像Controller中可以直接调用.


--------------------------------------------------------------------------------

Q: 为什么我读的数据只显示1条? find和findAll的区别?
A: 这是因为列表是使用的是find, 它只会返回第一条, 但是findAll会返回所有记录.


--------------------------------------------------------------------------------

Q: org.hibernate.MappingException An association from the table ** refers to an unmapped class错误的解决方法?
A: 如果碰到类似org.hibernate.MappingException: An association from the table ** refers to an unmapped class 这样的错误,发现的产生这样错误的原因是: 把域文件另存为了UTF-8编码. 这样在重新启动服务器时就会报这个错误. 解决方法是: 把这个domain文件备份后删除, 重新用Grails生成一个domain文件, 然后把原来的class里的代码拷贝回来. 这样再启动服务器就正常了.
分享到:
评论

相关推荐

    eclipse下的开发Grails项目的环境配置与项目部署

    通过以上步骤,你已经在Eclipse中成功配置了一个基本的Grails开发环境,现在可以开始创建、编辑和调试Grails项目了。记得定期更新Grails插件和Eclipse本身,以获取最新的功能和修复已知问题。在开发过程中,如果遇到...

    Grails 开发手册1

    《Grails开发手册》是对Grails这一基于Groovy语言的Web应用框架的详细介绍。Grails遵循“约定优于配置”的原则,简化了开发流程,整合了Spring MVC和Hibernate等流行技术,使得开发者无需手动编写数据访问层即可实现...

    grails学习

    本文将深入探讨 Grails 中的一些常见问题及其解决方案,帮助你更好地理解和掌握 Grails 开发。 1. **数据库连接问题** 当工程启动时,若遇到数据库连接错误,首先要检查 Eclipse 版本和编码设置是否一致。如果问题...

    grails-2.4.4

    在IDEA中,你可以通过安装Grails插件来得到对Grails 2.4.4的全面支持,包括自动代码完成、项目导航、调试和构建工具等。这极大地提高了开发效率,让开发Grails应用变得简单易行。 **3. Grails 2.4.4的改进与新特性*...

    Grails入门指南-中文版

    - Grails的目标是简化Web应用的开发过程,通过减少样板代码、提供约定优于配置的原则等方式来提高开发速度。 **2. Grails的关键特性** - **约定优于配置**: Grails采用了一系列约定,减少了配置文件的需求,使...

    grails不能运行fork模式解决方法

    标题中的“grails不能运行fork模式解决方法”指的是在使用Grails框架开发应用程序时遇到的一个问题,即在Grails 2.3.2版本中,尝试运行应用时,由于内部的`Forked Grails VM`无法正常启动,导致程序出现异常。...

    grails-plugin-converters-2.3.1.zip

    《Grails Plugin Converters 2.3.1与Box Java SDK v2:开源项目的融合与应用》 在当今数字化时代,开发高效的Web应用程序是至关重要的。Grails Plugin Converters 2.3.1 和 Box Java SDK v2 是两个在开源世界中备受...

    Grails 1.1 Web Application Development

    #### 四、Grails开发流程与最佳实践 - **项目初始化**:使用Grails命令行工具创建新的项目结构。 - **环境配置**:设置不同的环境(如开发、测试和生产环境),以便更好地管理部署和配置。 - **依赖管理**:利用...

    grails-transfert-project:Grails转移项目

    【Grails转移项目】是一个基于Groovy语言和Grails框架的软件开发项目,它涉及到将一个现有的Grails应用从一个环境或平台转移到另一个环境或平台的过程。Grails是一个高效的、基于Java平台的开源Web应用程序框架,它...

    The Definitive Guide to Grails Second Edition (Apress 2009)

    4. **优秀的社区支持**:Grails拥有活跃的开发者社区,提供了大量的文档、教程和技术支持,这对于解决开发过程中遇到的问题非常有帮助。 #### 四、核心知识点详解 1. **Grails的基本概念** - **领域模型**:...

    grails-docs-2.3.5.zip

    总的来说,Grails Docs 2.3.5是学习和使用Grails框架的重要资源,而APP55 Java客户端库则为Java开发者提供了一个强大且易于使用的支付解决方案。这两个开源项目的结合,为Java开发环境注入了新的活力,推动了软件...

    Grails入门指南

    三、Grails开发流程 1. **环境搭建**:首先需安装JDK,随后安装Grails框架和数据库,如MySQL或PostgreSQL。 2. **创建应用**:通过命令行工具创建一个新的Grails应用,如`grails create-app myApp`。 3. **领域模型...

    grails-datastore-simple-1.1.5.RELEASE.zip

    在这个开源项目中,Grails Datastore Simple与类型安全密钥的结合,为开发者提供了全面的数据管理和安全解决方案。通过深入理解Grails框架的持久化机制,开发者可以更好地利用Grails Datastore Simple进行数据操作,...

    grails和groovy的电子书-2

    根据给定文件的内容,以下是对标题“grails和groovy的电子书-2”中涉及知识点的详细阐述: **为何选择Groovy和Grails?** 文档首先提出为何选择Groovy和Grails的疑问,这引出了几个关键点:生产力、乐趣以及Groovy...

    grails-shiro-ui:Grails Shiro UI 插件

    Grails Shiro UI 插件是为基于Groovy的Grails框架开发的一款强大而易用的安全管理插件,它集成了Apache Shiro安全框架,为开发者提供了一整套用户认证和授权的解决方案。Apache Shiro是一款轻量级、全面的Java安全...

    解决grails服务端口冲突的办法(grails修改端口号)

    在开发过程中,尤其是在使用Grails这样的Web框架时,可能会遇到服务端口冲突的问题。这是因为Grails默认使用8080端口来启动其内置的Tomcat服务器。如果在同一台机器上你需要运行多个Grails项目,那么不可避免地会...

    grails-koans:用于测试驱动学习的 Grails 插件

    这个插件借鉴了禅宗中的“公案”概念,将学习过程转化为解决具体问题的小挑战,从而加深对Grails框架的理解。 **什么是Grails?** Grails 是一个基于Groovy语言的开源Web应用框架,它构建在Java平台上,旨在简化...

Global site tag (gtag.js) - Google Analytics