Ich habe eine einfache JSF Web App wie folgt. Die Java-Klasse enthält:JSF Conversion Error mit selectOneRadio
private String myString;
public String getMyString()
{
return myString;
}
public void setMyString(String radioValue)
{
myString = someHashMap.get(radioValue);
doStuffWith(myString);
}
Und die JSF-Seite Quelle enthält:
<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>
Wie ich es verstehe, ist die radioValueX Zeichenfolge von der Webseite als Parameter an das myString in der Java-Klasse verwendet wird, Setter-Methode. Also wollte ich es noch einen Schritt weiter verlängern jede Klasse zu verwenden:
private Foo myFoo;
public Foo getMyFoo()
{
return myFoo;
}
public void setMyFoo(String radioValue)
{
myFoo = someHashMap.get(radioValue);
doStuffWith(myFoo);
}
und
<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>
Allerdings bekomme ich folgende Fehlermeldung:
Conversion Error setting value 'radioValue' for 'null Converter'.
Ich bin nicht sicher, ob ich zu verstehen, wo irgendeine Art von "Umwandlung" stattfinden muss. In beiden Fällen wird der String-Wert aus dem Optionsfeld als Parameter für eine Setter-Methode verwendet, die einen String-Wert als Parameter verwendet. Richtig, im letzteren Fall wird der Wert für etwas gesetzt, das kein String ist, aber das sollte nicht wichtig sein, oder? Ich versuche nicht, den radioValueX-String im letzteren Fall in irgendeinen anderen Typ zu konvertieren, sondern benutze ihn als Schlüssel für eine Hash-Mappe, genau wie im ersten Fall.
Kann mir jemand helfen zu verstehen, was ich vermisse? Vielen Dank!
Als Randnotiz, dein Objekt wie derzeit defi ned bricht den "Bohnen" -Vertrag. Ist die Eigenschaft 'myFoo' ein Objekt vom Typ' Foo', wie es vom Getter impliziert wird, oder ein 'String' wie vom Setter impliziert? Diese Art von Asymmetrie sollte generell vermieden werden. –
Wie bedeutet der Setzer, dass es ein String ist? Der Setter verwendet einen String als Parameter, aber er setzt das Objekt als Foo. Das heißt, die referenzierte HashMap ist vom Typ ... etwas, das ich vergessen zu erwähnen. Ändert das deine Besorgnis oder bin ich immer noch falsch? Vielen Dank. –
The111
Normalerweise sollten Bean-Setter einen Parameter des gleichen Typs wie das einzustellende Feld verwenden. Das ist der "Bohnen-Vertrag". –