2016-04-07 2 views
0

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という制約を追加しました。

データバインディング時にセッターsetPropertyListが呼び出されます。結果のドメインインスタンスのプロパティには、すべてのプロパティが期待通りに設定されています。 しかし、私は結果のインスタンスを保存しようとすると、私は次の例外を取得:

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

は、インスタンスを検証するためにいくつかの問題を抱えてGrailsのように見えます。

これを修正する方法はありますか?

答えて

0

いくつかのデバッグの後、grailsはpropertyListの型を見つけることができなかったので、データバインディングをスキップします。

getterを追加すると、grailsが型を推測するのに役立ちます。 これは例外を回避します。

List<String> getPropertyList() {} 
関連する問題