为了用grails实现无限级分类的应用如组织机构、目录、系统菜单等,我碰了几次错,现终于解决了,写出来做个记录.
如果要实现无限级的系统菜单,我们实现的类如下
class SystemMenu {
String name;
String description;
SystemMenu parent;
static belongsTo =[parent:SystemMenu ]
static hasMany = [childrens:SystemMenu];
}
意思是:一个菜单项属于它的上级菜单[parent],同时又有它的子菜单[childrens]。
但用上面的类来实现的话,数据是无法保存的,首先报的一个错是:
[class SystemMenu]类的属性[parent]不能为null
这是因为新增第一条数据时没有上级菜单,我想能不能在数据库中先初始一条数据
但还是不行,出现约束违例手工插不上数据;没办法试了一下parent_id字段等于本记录的ID
可以插入数据了,再用grails试新增一条数据时,grails进入了死循环,因为上级菜单的数据的上级指向了自己。
后来把类改成
class SystemMenu {
String name;
String description;
SystemMenu parent;
static belongsTo =[parent:SystemMenu ];
static hasMany = [childrens:SystemMenu];
static constraints = {
parent(nullable:true)
}
}
让parent_id字段可以为空,结果就解决了问题,数据操作不再出现问题,可以自关联的应用。其实也可以这么实现:
class SystemMenu {
String name;
String description;
SystemMenu parent;
static belongsTo =[parent:SystemMenu ]
static hasMany = [childrens:SystemMenu];
static mapping = {
parent:[column:'parent_Id',lazy:"true",cascade:"none"]
children joinTable:[name:'children', key:'parent_Id', column:'Id',lazy:"true",inverse:"false",cascade:"none"]
}
static constraints = {
parent(nullable:true)
}
}
grails 真的好用
分享到:
- 2008-02-21 14:50
- 浏览 3224
- 评论(8)
- 论坛回复 / 浏览 (6 / 5448)
- 查看更多
相关推荐
2. **View**:Grails使用GSP(Groovy Server Pages)作为视图,类似于JSP,但更灵活,允许在页面中直接嵌入Groovy代码,实现动态内容的生成。 3. **Controller**:控制器负责处理用户请求,管理业务逻辑,接收表单...
在Grails这个基于Groovy的敏捷开发框架中,实现分页功能对于任何Web应用程序都是至关重要的,特别是当处理大量数据时。Grails提供了一些内置的支持,但如果你需要在自定义的控制器和视图中实现分页,那么就需要遵循...
- **创建应用**:使用`grails create-app Contact`命令可快速生成名为“Contact”的应用框架,该命令自动生成了标准的项目目录结构,包括但不限于`grails-app`下的`conf`、`controller`、`domain`、`i18n`、`...
在Eclipse中,Grails项目的结构和管理将得到很好的支持,包括源代码编辑、构建、测试和调试。 注意,尽管Eclipse对Grails的支持相比IntelliJ IDEA和NetBeans可能稍显不足,但通过Groovy Eclipse插件的配置,开发者...
使用Grails进行开发时,开发者可以通过定义清晰的领域类来实现业务逻辑,从而简化应用程序的复杂度。这种方式使得开发者能够更加专注于业务逻辑本身,而不是被底层的技术细节所困扰。通过领域类,可以直观地看到模型...
标题中的“grails使用freemarker.rar”表明这是一个关于如何在Grails框架中应用FreeMarker模板引擎的资源包。FreeMarker是一个开源的、基于Java的模板引擎,它用于生成动态HTML或其他格式的文本,比如XML、PDF等。...
"Grails下拉框联动最优实现"这个主题聚焦于如何在Grails应用中优雅地实现下拉框(Dropdown)的联动效果,这种效果常见于表单中,例如一个下拉框的选择会动态更新另一个下拉框的选项。 下拉框联动的核心是前端的交互...
在深入探讨如何在Eclipse环境中使用Grails类创建工具之前,我们先简要回顾一下Grails框架及其核心特性。Grails是一款基于Groovy语言的高性能Web应用开发框架,它遵循约定优于配置的原则,极大地简化了Web应用的开发...
通过配置URL映射,Grails允许开发者定义清晰、可读性强的URL结构,与控制器动作关联,实现RESTful API设计。 7. **构建与部署** Grails 使用Gradle作为构建工具,提供自动化构建、依赖管理等功能。构建的WAR文件...
2. **视图(View)**: 视图负责展示数据,通常使用GSP(Grails Server Pages)技术,这是一种结合了HTML和Groovy的模板语言,可以嵌入Groovy表达式和控制结构,实现动态内容的生成。 3. **控制器(Controller)**: ...
Grails使用Gradle作为构建工具,提供了`grails war` 命令生成可部署的WAR文件,方便在各种Java应用服务器上部署。 九、测试 Grails内置了测试框架,支持单元测试、集成测试和功能测试。通过`test-app` 命令,可以...
从给定的文件信息来看,主要关注点在于Grails框架的初学者使用说明。Grails是一个基于Groovy语言的开源Web应用开发框架,它利用了Java平台的优势,并结合了动态语言的灵活性,使得Web开发变得更为高效、简洁。下面将...
在本教程中,我们将探讨如何使用GORM(Grails Object-Relational Mapping)构建Spring Boot应用程序。GORM是Grails框架的核心部分,它为开发者提供了简单、强大的数据持久化功能,支持Hibernate和MongoDB等数据库。...
易于使用的基于Hibernate的对象-关系映射(ORM)层称为Groovy Server Pages (GSP)的表现层技术基于Spring MVC的控制器层构建于Gant 上的命令行脚本运行环境内置Jetty服务器,不用重新启动服务器就可以进行重新加载利用...
- **实战技巧**:包括 GORM (Groovy Object Relational Mapping) 的使用、如何在 Grails 中实现 Ajax 功能、处理遗留数据库的方法、利用遗留框架以及如何在 Grails 中使用 WebFlow。 - **高效编程系列**:涵盖使用 ...
**正文** 在IT行业中,开发Web应用程序时,我们经常使用各种框架来提高效率和灵活性。Grails就是一个基于Groovy语言的开源Web应用...无论是新手还是经验丰富的开发者,都能从中受益匪浅,实现高效的Grails应用开发。
- **创建一个Grails应用**:使用`grails create-app`命令可以快速创建一个新的Grails应用,这将生成基本的项目结构。 - **Hello World示例**:在新创建的应用中,你可以通过创建一个简单的控制器和视图来实现经典...
《Grails权威指南》是一本全面深入探讨Grails框架的专著,旨在帮助读者掌握这一强大的Web开发工具。Grails是一种基于Groovy语言的开源框架,它为构建现代、高效的应用程序提供了简洁高效的解决方案。本指南针对不同...
这将在指定目录下生成一个完整的Grails项目结构。 **3. 数据库配置** Grails默认使用H2内存数据库,如需使用MySQL,需修改`Config.groovy`中的数据库配置。添加如下代码: ```groovy dataSource { pooled = true ...