grails - 如何在 Grails 中使用嵌入的 GORM 类?

标签 grails grails-orm scaffolding grails-domain-class

遵循 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 。

更新模板:

  1. grails> 安装模板
  2. 打开 src/templates/scaffolding/renderEditor.template
  3. 找到以下行:
    sb << ' value="${' << domainInstance << '.' << property.name << '}"'

并更改为

    sb << ' value="${' << domainInstance << '?.' << property.name << '}"'

修复生成的 View :

  1. grails> 生成所有 grailscompositiontest.ScafPerson
  2. 打开views/scafPerson/_form.gsp
  3. 寻找
    <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/

相关文章:

javascript - 是否有任何理由在 grails 中使用通过 TagLibs 公开给定库而不是直接使用它的 JavaScript 库插件?

grails - Null springSecurityService 导致 encodePassword 在 Grails 2.0.1 中失败

mysql - Grails 属性不能为 null 错误

ruby-on-rails - Ruby on Rails 服务器长时间随机挂起/滞后

ruby-on-rails - 可下载的 Rails 生成器在哪里?

javascript - npm 全局包 : Reference content files from package

mysql - 数据库导入后 Grails 中的 java.lang.IllegalArgumentException

java - Groovy 中的 GroupBy

hibernate - GORM 组合 - 具有多对一关系的嵌入式域引发 org.hibernate.MappingException

groovy - 从 Spring Boot 渲染 GORM 类