因此,当提交我的表单时,我得到一个Validation Error: Value is not valid
。selectOneMenu枚举验证错误
我列举如下:
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();
}
}
...
当我尝试提交以下表格,我得到了提到的错误:
<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>
我和我的toString(发挥各地)方法在我的枚举当我返回“none”(就像枚举值命名一样),如果version属性为null,那么JSF表单实际上正在工作。 问题是,我的下拉菜单中的值不会加密枚举值。
为下拉菜单中的值是通过该方法在为myBean创建:
public Version[] getVersionValues(){
return Version.values();
}
的toString()方法转换这些值来“”,1.3和1.4。但是,我需要使它工作(看起来)没有,v1_3和v1_4。 我也尝试在Version.java中创建自己的equals方法,但它不起作用。 (等于(String)和等于(Version))。
您必须为类型“版本”应用转换器。 Java枚举值是类,而不是整数。您必须指定如何通过'converter =“myRegisteredCustomConverterID''属性或''子标签来显示它们。一个例子:https://www.mkyong.com/jsf2/custom-converter-in-jsf-2-0/ –
谢谢你,这是有效的。如果你能让你的评论成为答案,我可以接受它:) – kinglite