Grails - 即使参数已初始化,保存也会拒绝null

时间:2014-06-19 16:43:37

标签: grails null save grails-domain-class grails-controller

我是Grails的新手,我遇到了一个(可能是愚蠢的)问题。当我尝试保存域实例时,它失败并显示... on field 'deviceUsages[0].start': rejected value [null]...

这是失败的行动:

def save() {
            def user=params.remove('user.id')
            def deviceInstance=new Device(params)
            DeviceUsage du = new DeviceUsage(device: deviceInstance, user: User.get(user), start: new Date(), end: null)
            if(user){
                deviceInstance.addToDeviceUsages(du)
            }

            if (!deviceInstance.save(flush: true)) {
                deviceInstance.errors.each {
                    println it
                }

                render(view: "create", model: [deviceInstance: deviceInstance])
                return
            }

            du.save()
            flash.message = message(code: 'default.created.message', args: [message(code: 'device.label', default: 'Device'), deviceInstance.id])
            redirect(action: "show", id: deviceInstance.id)
        }

正如您所看到的,'start'显然已初始化为新日期...... 有问题的域类如下:

class Device {

    String name
    String description
    Date created = new Date()
    Date deactivated
    User currentUser

    static hasMany = [
        deviceUsages: DeviceUsage
    ]

    static constraints = {
        name(nullable:false, blank:false)
        description(nullable:false, blank:true)
        created(nullable:false, display:false)
        deactivated(nullable:true)
        currentUser(nullable:true)
    }

class DeviceUsage implements Serializable{
    Date start
    Date end

    static belongsTo = [
        device: Device,
        user: User
    ]

    static constraints = {
        start(nullable:false)
        end(nullable:true)
    }

    static mapping = {
        id composite: ['device', 'user']
        version false
    }

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

嗯我设法解决了......显然new DeviceUsage(device: deviceInstance, user: User.get(user), start: new Date(), end: null)因任何原因离开了null,所以在下一行添加du.start = new Date()修复了它...