フォームを送信するときに、ラジオボックスの値を選択しないと、検証のために何もコマンドオブジェクトに送信されません。私はtextFieldsやその他の入力タイプに問題はありません。上記の例ではGrails:選択されていないときにラジオボタンがコマンドobjに入力されない
class ApplicationCommand implements Validateable {
Map<String,String[]> questions = new LinkedHashMap<String,String[]>();
static constraints = {
questions validator: {val, obj, errors ->
for(String key : val.keySet()) {
errors.rejectValue("questions[${key}]",'required');
}
}
}
}
<g:radioGroup name="cmd.questions[1]" values="['Yes']" labels="['Yes']">
${it.radio}${it.label}
</g:radioGroup>
<g:textField name="cmd.questions[2]" />
私が見ることを期待どのような私は両方のフィールドを空のままにして、私は次のよう
qusetions = [2: String[0]]
を取得し提出する場合は、この問題のため
questions = [1: String[0], 2: String[0]]
ですquestions validator
にkey=1
が入力されていないため、私はそれを検証できません。質問はすべてDBから取り出された動的なものなので、if !questions.contains(1)
などのバリデーターには何もハードコードできません。送信時にquestions
に入力されたデータは、データがあると仮定しなければなりません。
私はラジオが選択されていない場合移入する値を強制的に隠しフィールドを追加し、唯一のラジオボタンのために、私は
1が好きどちらも2回避策を、)を発見しました。私のバリデータで恐ろしく醜い
<g:hiddenField name="cmd.questions[1]" value="-" />
2)、私はすべての私の質問のためのDBを照会し、手動でquestions
マップの各1の存在をチェック。バリデーターでDBクエリを避けたい。
私の2つの回避策オプションは機能しますが、私はそれらに頼らざるを得ないと感じています。
多分HTMLの制限についてのあなたの点を見ていますが、その場合、すべての空のフィールドが無視されると思います。しかし、その現実は無視される唯一のラジオボタンです。空のテキストまたは選択は、依然として空の値でフォームのサブミットに渡されます。だから私はラジオボタンで奇妙なHTMLのものか、おそらく偶然や他の方法で空のラジオ入力を具体的にフィルタリングしているGrailsコアの何かがわからないのです。 –
それはちょうどチェックボックスとラジオボタンです。実際、Grailsのチェックボックスタグ( '')を使用すると、この問題に対処するための隠し入力が自動的に追加されます。ラジオボタンでも同じことをしない理由はわかりません。 –
あなたの入力に感謝、オプション#2これの周りの最良の方法です。 –