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)