2011-09-12 4 views
1

私は人々が疑問を考える必要があり、実際にそれを埋めるために必要があるため、何かを要求し、このselectOneMenuは、デフォルト値は、空になっています。selectOneMenuで必須となるのはtrueのみですか?

<h:selectOneMenu id="fileSecurity" value="#{flowScope.application.fileSecurity}" required="true" > 
    <f:selectItem itemLabel="" itemValue="" noSelectionOption="true"/> 
    <f:selectItem itemLabel="ja" itemValue="true" /> 
    <f:selectItem itemLabel="nee" itemValue="false" />  
</h:selectOneMenu> 

あなたが記入したときにこれが今、私が持っているものです空の値では、「managementTabs:ApplicationManagementForm:fileSecurity:記入する必要があります。 が正しいです。

私が「はい」または真の値をクリックすると、アンサーを受け入れます。

が、私は何かfalseをクリックしたときには与えない: 「managementTabs:ApplicationManagementForm:fileSecurity:検証エラー:値が有効ではありません」

  • なぜJsf2.0が唯一の有効なawnserとして真の受け入れとしませんが偽ですか?
  • これには方法がありますか?または、カスタムバリデーターを記述する必要がありますか?

答えて

4

提出された値falseは、何らかの形で空の文字列値noSelectionOptionと競合しているようです。第一項目の次のエントリが正常に動作します:

<f:selectItem itemLabel="" itemValue="" /> 

<f:selectItem itemLabel="" noSelectionOption="true" /> 

<f:selectItem itemLabel="" itemValue="#{null}" noSelectionOption="true" /> 

私が唯一の理由を理解していません。それは不公平だ。本当の答えを見つけるために、私はデバッガを実行する必要があります。


更新:私は、デバッグおよびSelectUtils#valueIsNoSelectionOption()(クロサギ科)で犯人を見つけました。 noSelectionOptionの空の文字列はBoolean nullの代わりにboolean falseに強制的に変換されるため、提出された値との比較が有効であり、したがって選択された値は無効です。これは「設計による」ものです。実際にはitemValue="#{null}"を明示的に指定する必要があります。

+0

応答してくれてありがとうございますが、それは実際にはです。値は無効です – Lyrion

+0

はい、私は答えを投稿しました。例えば、それらのいずれかを試してみましたか?私の答えの最後の段落を読んだことがありますか? – BalusC

+0

おっと、私はあなたの最初の文章を実際に誤って読んでいません。私はあなたが最初のアイテムが "有効"であるものを追加すればそれを意味すると考えました。 – Lyrion

関連する問題