1) "grails generate-all/generate-views"脚本实例化DefaultGrailsTemplateGenerator
2)DefaultGrailsTemplateGenerator会创建类DefaultGrailsDomainClass的实例"domainClass",这个domainClass将允许脚本得到domain class的所有信息,如:属性、GORM的映射关系、关系和约束等,如:
3) 针对所有属性(props)进行循环
// 将约束保存到cp
// 根据p的类型调用相应的renderEditor (保存在: renderEditor.template)
//在renderEditor.template中,将根据类型做不同的render
总结:通过执行grails install-templates,可以获得scaffold进行CRUD渲染的模板,这是一个最直接剖析内部机理的方式。
[size=medium]参考:[/size]
Grails Scaffolding in Depth by Jakob Külzer (http://www.jakusys.de/blog/2008/12/grails-scaffolding-in-depth/)
2)DefaultGrailsTemplateGenerator会创建类DefaultGrailsDomainClass的实例"domainClass",这个domainClass将允许脚本得到domain class的所有信息,如:属性、GORM的映射关系、关系和约束等,如:
props = domainClass.properties.findAll { !excludedProps.contains(it.name) }
3) 针对所有属性(props)进行循环
// 将约束保存到cp
cp = domainClass.constrainedProperties[p.name]
// 根据p的类型调用相应的renderEditor (保存在: renderEditor.template)
${renderEditor(p)}
//在renderEditor.template中,将根据类型做不同的render
Switch(type)
{
Case: Enum
renderEnumEditor(domainClass, property)
Case: String
renderStringEditor(domainClass, property)
Case: Date
renderDateEditor(domainClass, property)
…
}
总结:通过执行grails install-templates,可以获得scaffold进行CRUD渲染的模板,这是一个最直接剖析内部机理的方式。
[size=medium]参考:[/size]
Grails Scaffolding in Depth by Jakob Külzer (http://www.jakusys.de/blog/2008/12/grails-scaffolding-in-depth/)