我摆脱了最初的UPDATE gsp Grails优惠。
我将它放在list.gsp表的第一行,并将表的所有值更改为g:textfield,这样就可以编辑它们而无需转到save.gsp
但现在我正努力让它发挥作用,而我却做不到。
我在每行的最后一列添加了一个更新按钮。
当我更改g:textfields的值并单击更新按钮时,它会告诉我
Density #ID updated
但值不会改变。
我认为我在控制器中进行def更新时出错了。
以下是代码:
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来查看值是否正确,现在我不知道如何使textfield的值成为输入的值,它给了我相同的值它之前有,但它给我的消息说它已更新。 控制器是DensityController,域是密度
非常感谢任何帮助。谢谢:D
答案 0 :(得分:1)
从正在打印的flash消息看起来好像正在更新实例(虽然“#ID”位看起来很奇怪 - 你是否替换了实际的id?)。
可能是那个
densityInstance.properties = params
实际上并不匹配任何实例属性,因此在保存之前实际上没有更改任何实例属性。您确定已将gsp输入字段命名为与Density类字段的名称相匹配吗? Rcommodity是密度的属性,例如?
可能有助于添加gsp页面的表格位以及密度域类。