JSF输入未能双转换错误

Iva*_*vov 5 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;
    }
}
Run Code Online (Sandbox Code Playgroud)

在我的xhtml文件中,我为每个元素都有:

<h:inputText id="value1" value="#{myBean.values[0]}">
    <f:convertNumber pattern="#########0.##" />
</h:inputText>
Run Code Online (Sandbox Code Playgroud)

我的目的是将值检索为ArrayList.另外,我不想为每个成员保留单独的属性.未来的要求将使值的总数变为动态(而不是硬编码的5),因此我可以使用循环来定义每个元素的输入,但现在不要关注它.

所以这就是问题所在.提交页面时,转换不正确.例如,如果我的输入是1,2.0,3(和最后两个元素的2个空输入,它们不是必需的),我收到以下数组[1,"2.0",3,"",""] ,其中1和3是类型BigDecimal,2.0和最后2个成员是空字符串.这导致ClassCastexception每次我尝试获取数组列表的成员,因为根据定义是通用的,泛型类型是Double.BigDecimal无法投入Double; 很明显,字符串强制转换尝试也会失败.现在,我已经预计至少所有成员都会被转换器转换成相同的类型.另外,我需要一种方法来正确地获得Double.我也尝试过以下方法:

<h:inputText id="value1" value="#{myBean.values[0]}">
    <f:converter id="javax.faces.Double" />
</h:inputText>
Run Code Online (Sandbox Code Playgroud)

但它引起了一个例外:

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

我必须承认,我是新来的JSF技术,但至于条而言,没有必要覆盖任何东西.任何帮助将不胜感激

Bal*_*usC 13

<f:converter>不具有id的属性,而不是它converterId.另请参阅标签文档.所以,这应该做:

<h:inputText id="value1" value="#{myBean.values[0]}">
    <f:converter converterId="javax.faces.Double" />
</h:inputText>
Run Code Online (Sandbox Code Playgroud)

甚至

<h:inputText id="value1" value="#{myBean.values[0]}" converter="javax.faces.Double" />
Run Code Online (Sandbox Code Playgroud)