1

ブール値を表す 2 つのフォーム フィールドのいずれかがチェックされていることを確認したいと考えています。しかし、これを行うための適切な制約はありません。nullable: false動作しません。

class Organisation {

    Boolean selfInspecting

    static constraints = {
        selfInspecting(nullable: false)
    }

}

2 つのフィールドのいずれかがチェックされているかどうかを確認するにはどうすればよいですか?

4

3 に答える 3

3

おそらく最も簡単な方法は、値が選択されることを保証するフォームを使用することです。そのため、チェックボックスではなくラジオ ボタンを作成する方が優れたソリューションです。それはあなたの意図も直接表しています。

于 2010-11-18T16:38:16.797 に答える
2

コントローラーでこれを確認することもできます。

if (params.checkBox1 != 'on' && params.checkBox2 != 'on')
  flash.error = 'At least one value must be checked.'
  return ...
于 2010-11-19T12:05:03.023 に答える
1

独自のカスタム バリデータを作成できます。

何かのようなもの

selfInspecting(validator: {val, obj -> /*test selfInspecting here*/})

編集 - 他の回答に応じて - これはフォームで処理できますが、サーバーでも処理する必要があります。

別の編集 -- ドメイン クラスの 2 つのフィールドのいずれかを検証することがコメントで提案されました。これも、カスタム バリデータを使用して簡単に実現できます。上記のカスタム バリデータ クロージャの署名では、val は値 selfInspecting であり、obj はドメイン オブジェクト インスタンスです。だから、あなたが持つことができます

{ val, obj ->

    if (val == null) return false // if you want to ensure selfInspecting is not null
    else return true

    ... or ...

    // if you want to check that at least 1 of two fields is not null
    def oneOrTheOther = false
    if (obj.field1 != null || obj.field2 != null) 
       oneOrTheOther = true
    return oneOrTheOther

}
于 2010-11-18T16:41:58.617 に答える