【发布时间】:2014-09-25 14:34:10
【问题描述】:
一个全新的 grails 2.3.x 项目。我为域类使用自动生成的控制器和视图。我想直接在控制器中设置一个(非空)属性,所以我从 _form.gsp 中删除了输入字段。
领域类:
class Demo {
String demo
String status
static constraints = {
demo nullable: false
status nullable: false
}
在表单中我只填写演示字段。
自动生成的控制器结果:
...
@Transactional
def save(Demo demoInstance) {
if (demoInstance == null) {
notFound()
return
}
// set the status property to "test"
demoInstance.status = "test"
println "1 STATUS: ${demoInstance.status}"
if (demoInstance.hasErrors()) {
println "2 STATUS: ${demoInstance.status}"
respond demoInstance.errors, view: 'create'
return
}
println "3 STATUS: ${demoInstance.status}"
...
填写表格并将状态属性留空导致
println 1 -> 状态 = '测试'
println 2 -> 状态 = '测试'
重定向以创建带有消息的页面:“类 [Demo] 的属性 [status] 不能为空”
当我在 grails 2.2.x 中更改控制器时:
...
@Transactional
def save() {
def demoInstance = new Demo(params)
if (demoInstance == null) {
notFound()
return
}
// set the status property to "test"
demoInstance.status = "test"
println "1 STATUS: ${demoInstance.status}"
if (demoInstance.hasErrors()) {
println "2 STATUS: ${demoInstance.status}"
respond demoInstance.errors, view: 'create'
return
}
println "3 STATUS: ${demoInstance.status}"
...
这会产生预期的输出:
println 1 -> 状态 = '测试'
println 3 -> 状态 = '测试'
输入存储在数据库中。
谁能解释这种行为?谢谢。
【问题讨论】:
标签: grails grails-2.3