私は JSF 2.0、JBoss 7.1.1 Final を使用していますが、selectOneMenu に次の問題があります。マネージド Bean のフィールドを true/false/null に設定できるようにしたいと考えています。したがって、次の selectOneMenu を作成しました。
<h:selectOneMenu value="#{personList.criteria.registrationComplete}" >
<f:selectItem itemValue="#{null}" itemLabel="Any.." />
<f:selectItem itemValue="true" itemLabel="Yes"/>
<f:selectItem itemValue="false" itemLabel="No"/>
</h:selectOneMenu>
ここで、「Any..」を選択すると、registrationComplete フィールド (ブール値) に「false」が割り当てられます。したがって、null は false として解釈されます。また、selectItem(s) でブール値を使用しようとしました。
<h:selectOneMenu value="#{personList.criteria.registrationComplete}" >
<f:selectItem itemValue="#{null}" itemLabel="Any.." />
<f:selectItem itemValue="#{true}" itemLabel="Yes"/>
<f:selectItem itemValue="#{false}" itemLabel="No"/>
</h:selectOneMenu>
また、次のように、faces-config にコンバーターを登録しました。
<converter>
<converter-id>booleanConverter</converter-id>
<converter-class>javax.faces.convert.BooleanConverter</converter-class>
</converter>
そしてそれを使用しようとしました:
<h:selectOneMenu value="#{personList.criteria.registrationComplete}" >
<f:selectItem itemValue="#{null}" itemLabel="Any.." />
<f:selectItem itemValue="true" itemLabel="Yes"/>
<f:selectItem itemValue="false" itemLabel="No"/>
<f:converter converterId="booleanConverter"/>
</h:selectOneMenu>
しかし、これらの試行はすべて同じ動作になりました。null 値が選択された場合、false と解釈されました。
私はそれをデバッグし、スタック トレースでそれが発生する場所を見つけました。のAstValue.setValue(EvaluationContext, Object) line: 204
それが呼ぶ
ELSupport.coerceToType(value, targetClass)
value パラメーターは null で、targetClass はブール値です。次に、この coerceToType メソッドは false を返します。
この問題を解決する方法はありますか? ありがとう!