Walidacja warunkowa z zerową wartością Grails lub walidator niestandardowy z opcją null

Mam formularz do utworzenia miejsca. W zależności od kraju wymagane jest pole prowincji (stan, region).

Kiedy nie jest wymagane, chcę mieć wartość NULL, a nie pusty łańcuch. Mam kod, który powoduje, że wszystkie puste pola formularza są puste:

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()

Teraz w domenie miejsca mam walidator w prowincji:

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

Z tą regułą zawsze dostaję „prowincja nie może być zerowa”, nawet jeśli jest wymagana.

Myślę, że to dlatego, że walidator, który jest ustawiony domyślnie na false.

Jeśli dodam wartość pustą: true, to nawet jeśli wymagana jest prowincja, niestandardowy walidator jest pomijany i możliwe jest zapisanie z pustą prowincją (myślę, że to dlatego, że jest tworzony z wartością null)

Teraz potrzebuję w jakiś sposób mojego niestandardowego walidatora, a także możliwości określenia wartości dopuszczalnej w moim walidatorze, coś takiego:

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

Jak mogę to osiągnąć w Grails 2.0.3?

questionAnswers(2)

yourAnswerToTheQuestion