遵循 GORM docs我尝试在 Grails 2.2.1 中使用以下域类:
package grailscompositiontest
class ScafPerson {
String name
ScafAddress homeAddress
ScafAddress workAddress
static constraints = {
name(nullable: false, blank: false)
}
static embedded = ['homeAddress', 'workAddress']
}
class ScafAddress {
String number
String code
}
Controller 仅使用脚手架:
package grailscompositiontest
class ScafPersonController {
static scaffold = true
}
不幸的是,这不起作用,一旦我浏览到“创建” View ,它就会触发服务器错误:
URI: /GrailsCompositionTest/scafPerson/create
Class: java.lang.NullPointerException
Message: Cannot get property 'id' on null object
知道我做错了什么吗?
最佳答案
前几天我也遇到了同样的问题。我相信脚手架功能使用的模板中可能存在错误。您可以更新模板,或者如果您不想破坏模板,请按照 Benoit 提到的方式运行 generate-all,然后修复生成的 View 。
更新模板:
- grails> 安装模板
- 打开 src/templates/scaffolding/renderEditor.template
- 找到以下行:
sb << ' value="${' << domainInstance << '.' << property.name << '}"'
并更改为
sb << ' value="${' << domainInstance << '?.' << property.name << '}"'
修复生成的 View :
- grails> 生成所有 grailscompositiontest.ScafPerson
- 打开views/scafPerson/_form.gsp
- 寻找
<g:field name="id" type="number" value="${scafAddressInstance.id}" required=""/> <g:field name="version" type="number" value="${scafAddressInstance.id}" required=""/>
并更改为
<g:field name="id" type="number" value="${scafAddressInstance?.id}" required=""/> <g:field name="version" type="number" value="${scafAddressInstance?.id}" required=""/>
注意因为您有 homeAddress/workAddress,所以您将执行两次
关于grails - 如何在 Grails 中使用嵌入的 GORM 类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15902093/