gpt4 book ai didi

grails - 进行一对多动态表单提交

转载 作者:行者123 更新时间:2023-12-02 14:42:28 25 4
gpt4 key购买 nike

我的应用程序中包含以下域:

class Sport implements Serializable {

Set terms

static hasMany = [terms: Term]

static mapping = {
terms cascade: "all-delete-orphan"
}
}

class Term implements Serializable {
String term
String tagCode
Sport sport

static constraints = {

sport nullable: false

}
static belongsTo = [sport: Sport]
static mapping = {
table "terms"
sport cascade: "save-update,merge"
}

}

和SportController更新方法:
 @Transactional
def update(Sport sport) {
def sportInstance = sportService.update(sport)
....
}

我还有edit.gsp,可以在其中通过JavaScript动态添加/删除术语,并且它们具有以下命名约定:
<ul>
<li>
<g:textField id="term${i}" name="terms[${i}].term"
required=""
value="${term?.term}"/>
</li>
<li>
<g:textField id="synonym${i}"
name="terms[${i}].synonym"
value="${term?.synonym}"/>

</li>
</ul>

当我添加新术语并提交edit.gsp时,一切正常:在SportController.update()方法中,Sport.terms Set包含新的Term实例,并且没有问题。但是,当我从编辑页面删除一个术语并提交页面时,然后在SportController.update()方法中,Sport.terms Set仍然包含在页面上删除的Term实例。我确定此Term实例未提交(我检查了请求,但其中不包含请求),因此我怀疑Grails会以某种方式将其与Sport实例一起获取,但我不要求这样做。也许您有类似的经历?您能帮我吗?我已经花了大约5个小时来解决它。谢谢!

最佳答案

选项之一是将Set terms转换为List terms,这将使GORM删除并在每个save()上重新创建集合

关于grails - 进行一对多动态表单提交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27426955/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com