因此,當提交我的表單時,我得到一個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