如何在瞬态上使用可绑定约束来避免“无法读取只写属性”

时间:2016-04-07 07:21:50

标签: grails gorm grails-3.1

我无法使用grails 3.1.4使用瞬态属性绑定值。

以此域名为例:

class Domain {
    Boolean b1
    Boolean b2
    Boolean b3

    void setPropertyList(propertyList) {
        if(propertyList.contains('someValue'))
            this.b1 = true         
    }

    static transients = ['propertyList']

    static constraints = {
        propertyList bindable: true
    }
}

我想使用特定属性(此处:propertyList)进行数据绑定。此属性在数据绑定源中可用,但在我的域中不可用。所以我添加了一个瞬态和一个二传手。要包含用于数据绑定的瞬态propertyList,我添加了bindable约束。

在数据绑定期间调用setter setPropertyList。结果域实例的属性具有按预期设置的所有属性。 但是当我尝试保存结果实例时,我得到以下异常:

groovy.lang.GroovyRuntimeException: Cannot read write-only property: propertyList
    at org.grails.validation.ConstrainedPropertyBuilder.doInvokeMethod(ConstrainedPropertyBuilder.java:74)

看起来grails在验证实例时遇到了一些麻烦。

任何想法如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

经过一些调试后发现,grails无法找到propertyList的类型,因此会跳过数据绑定。

添加getter可帮助grails推断出类型。 这避免了例外。

List<String> getPropertyList() {}