Grails bedingte nullfähige Validierung oder benutzerdefinierte Validierung mit nullfähiger Option

Ich habe ein Formular, um einen Ort zu schaffen. Je nach Land ist das Feld Provinz (Bundesland, Region) erforderlich oder nicht.

Wenn nicht erforderlich, möchte ich null sein, keine leere Zeichenfolge. Ich habe Code, der alle leeren Formularfelder leer macht:

def newparams = [:]
        place = new Place()
        params.each() { k, v ->
            if (v instanceof String && place.hasProperty(k)) {
                if (!v.trim().length()) {
                    newparams[k] = null
                } else {
                    newparams[k] = v
                }
            }
        }

        place = new Place(newparams)
        place.validate()

Jetzt habe ich in der Ortsdomäne einen Validator für die Provinz:

province validator:  {val, obj -> if (obj.country in obj.requiresRegionCountries() && !obj.province) return [province.required]}

Mit dieser Regel erhalte ich immer "Provinz kann nicht null sein", auch wenn es erforderlich ist oder nicht.

Ich denke, das liegt daran, dass der nullfähige Validator standardmäßig auf false gesetzt ist.

Wenn ich nullable: true hinzufüge, wird der benutzerdefinierte Validator auch dann übersprungen, wenn eine Provinz erforderlich ist, und es ist möglich, mit leerer Provinz zu speichern (ich denke, das liegt daran, dass er mit null instanziiert wird).

Jetzt brauche ich irgendwie meinen benutzerdefinierten Validator und die Möglichkeit, das Nullable in meinem Validator anzugeben, etwa so:

province validator:  {val, obj -> 
  if (obj.country in obj.requiresRegionCountries() && !obj.province) { 
    nullable: false
    return [province.required] }
  else {
    nullable: true
  }
}

Wie kann ich das in Grails 2.0.3 erreichen?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage