JSF输入未能双转换错误

时间:2011-10-31 15:42:20

标签: java validation jsf-2

我有一个使用Spring 3.0的JSF2应用程序。我有一个bean,它具有类型为List<Double>的属性,包含5个元素:

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文章而言,没有必要覆盖任何内容。任何帮助将不胜感激

1 个答案:

答案 0 :(得分: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" />