2011-10-31 24 views
5

我有一個使用Spring 3.0的JSF2應用程序。我有一個具有List<Double>類型的屬性有5個元素一個bean:JSF輸入無法雙重轉換錯誤

public class MyBean { 
    private List<Double> values; 
    public List<Double> getValues() { 
     if (values == null) { 
      values = new ArrayList<Double>(5); 
       for (int i = 0; i < 5; i++) { 
        values.add(null); 
       } 
     } 
     return values; 
    } 
    public void setValues(List<Double> values) { 
     this.values = values; 
    } 
} 

在我的XHTML文件我有這樣的每一個元素:

<h:inputText id="value1" value="#{myBean.values[0]}"> 
    <f:convertNumber pattern="#########0.##" /> 
</h:inputText> 

我的目的是要獲取值ArrayList。另外,我不想保留每個成員的單獨屬性。未來的需求將使得數值的總數是動態的(而不是硬編碼的5),所以我可以使用一個循環來定義每個元素的輸入,但現在不要關注這個。

所以這裏是問題所在。當我提交頁面時,轉換不正確。例如,如果我的輸入是1,2.0,3(和最後兩個元素的2個空輸入,它們不是強制性的),我正在接收以下數組[1,「2.0」,3,「」,「」] ,其中1和3的類型爲BigDecimal和2.0,最後2個成員爲空字符串。這導致ClassCastexception每次我嘗試獲取數組列表的成員,因爲根據定義是通用的,泛型類型是DoubleBigDecimal不能投射到Double;很明顯,字符串轉換嘗試也會失敗。現在,我預計至少所有成員都會被轉換器轉換並且是相同類型的。此外,我需要一種方式來正確獲取Double。我也試過如下:

<h:inputText id="value1" value="#{myBean.values[0]}"> 
    <f:converter id="javax.faces.Double" /> 
</h:inputText> 

,但它導致了異常:

<f:converter> Default behavior invoked of requiring a converter-id passed in the constructor, must override ConvertHandler(ConverterConfig)

我必須承認,我是新來的JSF技術,但據this文章而言,有不需要重寫任何東西。任何幫助將不勝感激

回答

13

<f:converter>沒有id屬性,而是它converterId。另請參閱tag documentation。所以,這應該這樣做:

<h:inputText id="value1" value="#{myBean.values[0]}"> 
    <f:converter converterId="javax.faces.Double" /> 
</h:inputText> 

甚至

<h:inputText id="value1" value="#{myBean.values[0]}" converter="javax.faces.Double" /> 
+0

是的,的確有'convertedId'我得到它的工作。不幸的是,我被上面提供的url誤導了。感謝你及時的答覆。 –