2016-04-07 11 views
0

Ich habe Probleme, Werte mithilfe einer vorübergehenden Eigenschaft mit Grails 3.1.4 zu binden.Wie zu vermeiden "Kann schreibgeschützte Eigenschaft nicht lesen" mit bindbare Einschränkung für transient

Unter dieser Domain als Beispiel:

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 
    } 
} 

Ich möchte eine bestimmte Eigenschaft verwenden (hier: propertyList) für die Datenbindung. Diese Eigenschaft ist in der Datenbindungsquelle verfügbar, jedoch nicht in meiner Domäne. Also fügte ich einen Transienten und einen Setter hinzu. Um die Transiente propertyList für die Datenbindung einzuschließen, fügte ich die Einschränkung hinzu.

Der Setter setPropertyList wird während der Datenbindung aufgerufen. Für die Eigenschaften der resultierenden Domäneninstanz wurden alle Eigenschaften wie erwartet festgelegt. Aber wenn ich versuche, das führte Instanz zu speichern ich die folgende Ausnahme erhalten:

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

Sieht aus wie Grails einige Probleme, die Instanz zu bestätigen.

Irgendwelche Ideen, wie das zu beheben?

Antwort

0

Nach einigen Debugging stellt sich heraus, dass Grails keinen Typ für propertyList finden konnten und so die Datenbindung überspringt.

Das Hinzufügen eines Getters hilft den Grails, auf den Typ zu schließen. Dies vermeidet die Ausnahme.

List<String> getPropertyList() {}