So bekomme ich eine Validation Error: Value is not valid
beim Absenden meines Formulars.selectOneMenu enum Validierungsfehler
Meine Enum sieht wie folgt aus:
public enum Version {
none, v1_3("1.3"), v1_4("1.4");
private BigDecimal version;
Version(String vers) {
version = new BigDecimal(vers);
}
Version() {
}
public String toString() {
if(version == null){
return " ";
}
else{
return version.toPlainString();
}
}
...
Wenn ich versuche, das folgende Formular abzuschicken ich die erwähnte Fehlermeldung erhalten:
<h:form>
<p>
<h:outputText value="Test Version: " />
<h:selectOneMenu binding="#{inputVersionTest}">
<f:selectItems value="#{myBean.getVersionValues()}" />
</h:selectOneMenu>
</p>
<h:commandButton value="Test" type="submit" action="#{myBean.test(inputVersionTest.value)}" />
</h:form>
Ich spielte mit meiner Methode toString() in meinem Enum und wenn ich "none" zurückgebe (genau wie die Benennung des enum-Wertes), wenn das version-Attribut null ist, arbeitet das JSF-Formular tatsächlich. Das Problem ist, dass die Werte in meinem Dropdown-Menü die Enum-Werte nicht bearbeiten.
Die Werte für die Drop-Down-Menü wird durch dieses Verfahren in MyBean erstellt:
public Version[] getVersionValues(){
return Version.values();
}
Die toString() Methode wandelt diese Werte auf "", 1.3 und 1.4. Aber was ich brauche, um es funktionieren zu lassen (es scheint), ist none, v1_3 und v1_4. Ich habe auch versucht, meine eigene equals-Methode in Version.java zu erstellen, aber es hat nicht funktioniert. (entspricht (Zeichenfolge) und entspricht (Version)).
Sie müssen einen Konverter für den Typ "Version" anwenden. Java-enum-Werte sind Klassen, keine Ganzzahlen. Sie müssen angeben, wie sie durch das Attribut 'converter = "myRegisteredCustomConverterID"' oder durch ein ' ' -Subtag angezeigt werden sollen. Ein Beispiel: https://www.mkyong.com/jsf2/custom-converter-in-jsf-2-0/ –
Vielen Dank, das funktioniert. Wenn Sie Ihren Kommentar zu einer Antwort machen können, kann ich es akzeptieren:) – kinglite