【发布时间】:2011-12-18 20:26:43
【问题描述】:
我有一个使用 Spring 3.0 的 JSF2 应用程序。我有一个具有 List<Double> 类型属性的 bean,其中包含 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,因为根据定义是泛型的,泛型类型是Double。 BigDecimal 不能转换为 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 文章而言,没有必要重写任何内容。任何帮助将不胜感激
【问题讨论】:
标签: java validation jsf-2