我摆脱了Grails提供的原始UPDATE gsp。
我将其放在list.gsp表的第一行中,并将该表的所有值更改为g:textfield,以便无需进入save.gsp即可对其进行编辑
但是现在我正在尝试使其工作,但我不能。
我在每一行的最后一列中添加了一个更新按钮。
当我更改g:textfields的值并单击更新按钮时,它告诉我Density #ID updated
但值不会改变。
我认为 Controller 中的def update做错了。
这是代码:
def update = {
log.info "Entering Action ${actionUri}"
def densityInstance = Density.get(params.id)
if (densityInstance) {
if(params?.Rcommodity) {
println "${params.Rcommodity}"
}
if (params.version) {
def version = params.version.toLong()
if (densityInstance.version > version) {
densityInstance.errors.rejectValue("version", "default.optimistic.locking.failure", [message(code: 'density.label', default: 'Density')] as Object[], "Another user has updated this Density while you were editing")
render(view: "list", model: [densityInstance: densityInstance])
return
}
}
densityInstance.properties = params
if (!densityInstance.hasErrors() && densityInstance.save(flush: true)) {
flash.message = "${message(code: 'default.updated.message', args: [message(code: 'density.label', default: 'Density'), densityInstance.id])}"
redirect(action: "list", id: densityInstance.id)
}
else {
redirect(action: "list", id: densityInstance.id)
}
}
else {
flash.message = "${message(code: 'default.not.found.message', args: [message(code: 'density.label', default: 'Density'), params.id])}"
redirect(action: "list")
}
}
Rcommodity是创建的文本字段的名称,我放置了一个println来查看该值是否正确,现在我不知道如何使该文本字段的值成为输入的文本字段,它为我提供了与之前相同的值但它给我的消息是它已更新。
Controller 是DensityController,域是密度
任何帮助将不胜感激。感谢:D
最佳答案
从正在打印的Flash消息中看,好像实例正在更新(尽管“#ID”位看起来很奇怪-您是否替换了实际ID?)。
可能是
densityInstance.properties = params
实际上与任何实例属性都不匹配,因此在保存之前实际上没有任何更改。您确定已将gsp输入字段命名为与Density类字段的名称匹配吗?例如,Rcommodity是密度的属性吗?
可能会帮助您添加gsp页面的表单位以及Density域类。
关于list - Grails:UPDATE函数如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3924987/