次のような単純な JSF Web アプリがあります。Java クラスには以下が含まれます。
private String myString;
public String getMyString()
{
return myString;
}
public void setMyString( String radioValue )
{
myString = someHashMap.get( radioValue );
doStuffWith( myString );
}
また、JSF ページ ソースには以下が含まれます。
<h:form>
<h:selectOneRadio id="topicSelectOneRadio" required="true"
requiredMessage="Choose a thing"
value="#{someBean.myString}">
<f:selectItem itemValue="radioValue1" itemLabel="1"/>
<f:selectItem itemValue="radioValue2" itemLabel="2"/>
</h:selectOneRadio>
<p><h:commandButton value="Do it"/></p>
</h:form>
私が理解しているように、web ページの radioValueX 文字列は、myString セッター メソッドへのパラメーターとして Java クラスで使用されています。したがって、任意のクラスを使用できるように、さらに一歩拡張したいと考えました。
private Foo myFoo;
public Foo getMyFoo()
{
return myFoo;
}
public void setMyFoo( String radioValue )
{
myFoo = someHashMap.get( radioValue );
doStuffWith( myFoo );
}
と
<h:form>
<h:selectOneRadio id="topicSelectOneRadio" required="true"
requiredMessage="Choose a thing"
value="#{someBean.myFoo}">
<f:selectItem itemValue="radioValue1" itemLabel="1"/>
<f:selectItem itemValue="radioValue2" itemLabel="2"/>
</h:selectOneRadio>
<p><h:commandButton value="Do it"/></p>
</h:form>
ただし、次のエラーが表示されます。
Conversion Error setting value 'radioValue' for 'null Converter'.
どこで「変換」を行う必要があるのか 理解できません。どちらの場合も、ラジオ ボタンの文字列値は、文字列値をパラメーターとして受け取る setter メソッドへのパラメーターとして使用されています。確かに、後者の場合、実際には文字列ではないものの値を設定していますが、それは問題ではないはずです。最初のケースと同じように、後者の場合は radioValueX String を他のタイプに変換しようとしているのではなく、ハッシュマップのキーとして使用するだけです。
私が欠けているものを理解するのを手伝ってくれる人はいますか? ありがとう!