2011-12-16 3 views
1

私は現在、シンプルなページを持ち、シンプルなビーンで裏打ちされた単純な春のアプリを持っています。こちらのページから関連するスニペット...selectOneRadioがデフォルトのブール値にプリセットされないようにするにはどうすればいいですか?

<h:selectOneRadio id="q1" value="#{controller.formBean.question1}"> 
    <f:selectItem itemValue="true" itemLabel="Yes" /> 
    <f:selectItem itemValue="false" itemLabel="No" /> 
</h:selectOneRadio> 

そしてバッキングBean、フォームBeanからだ:

private boolean question1; 
public void setQuestion1(boolean question1) { 
    this.question1 = question1; 
} 
public boolean isQuestion1() { 
    return question1; 
} 

は、コントローラが(nullではない検証済み)Beanをインスタンス化します。

これは問題の一部です。ブール値がデフォルトのfalseに初期化されると、このフォームコントロールには常に「デフォルトの回答」が事前に選択されています。ユーザーに明示的に「はい」または「いいえ」を選択させたいので、ラジオボタンが事前入力されていないことを確認する必要があります。

すべてのフィールドをブール値に変換しようとしました(true/false/nullを表すことができるように)が、壊れたスプリングはブーリアンではなくブーリアンを使用します。

誰もが考えている?私は春には新しく、ここで本当にシンプルなものが欠けていると確信しています。

答えて

2

booleanの代わりにBooleanを使用してください。 Booleanは、第3の「状態」:nullを有する。私はあなたがそれを試したときに "崩壊した春"とはどういう意味か分かりません。

よりクリーンな方法は、代わりにenumを使用することです。

<h:selectOneRadio id="q1" value="#{controller.formBean.question1}"> 
    <f:selectItems value="#{data.choices}" /> 
</h:selectOneRadio> 

private Choice question1; 
+0

を使用して

public enum Choice { Yes, No; } public Choice[] getChoices() { return Choice.values(); } 

私はすでにブールを使用してみました言及しました。ページをロードすると、残念ながら私は致命的なエラーが発生しました... IIRCにはNPEがありました。私の同僚は列挙型について奇妙な意見を持っています。私はそれを使うことで逃げることができないと思います。 – yep

関連する問題