grails - 为什么在保存时两次调用Grails中的二传手?

标签 grails groovy setter

查看下面的Grails域类,如果对象是第一次保存的(如果没有id),它将在setter中修改一个值:

class Idtest {

  String name

  void setName(String name) {
    if(!this.id)
      this.name = name + "TEST"
    else
      this.name = name
  }

}

如果我使用generate-all生成 View 和 Controller ,请启动应用程序,然后在生成的表单中输入“hello”,将保存“helloTESTTEST”。
save函数如下所示:
def save = {
    def idtestInstance = new Idtest(params)
    if (idtestInstance.save(flush: true)) {
        flash.message = "${message(code: 'default.created.message', args: [message(code: 'idtest.label', default: 'Idtest'), idtestInstance.id])}"
        redirect(action: "show", id: idtestInstance.id)
    }
    else {
        render(view: "create", model: [idtestInstance: idtestInstance])
    }
}

为什么二传手叫两次?

最佳答案

而不是做
if(!this.id){}

您应该使用beforeInsert()

GORM Advanced Features

关于grails - 为什么在保存时两次调用Grails中的二传手?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4096817/

相关文章:

testing - Grails war 并包含测试

java - Grails hibernate 方言

grails - Swaggydoc插件grails 3.2.1

eclipse - Eclipse 无法解析 Groovy Grape 导入

ruby - 为什么 Ruby setter 返回传递的值,而不是实例变量的最终值?

spring - chalice 升级错误-创建名称为 'transactionManagerPostProcessor'的bean

grails - 使用索引属性使一对多关系陷入困境

hibernate - 如何使测试中的一对一关系失败?

Swift 4.2 Setter Getter,所有通过该函数的路径都会调用自身

wpf - 将样式放在网格样式内的控件上