我在这个项目中使用了JSF 1.2和IceFaces 1.8。
我有一个页面,它基本上是一大堆浮点数字段的大编辑网格。这是通过页面上的inputText
字段实现的,这些字段指向具有原始float
类型的值对象
现在,由于新要求看到某些字段可以为空,我想将值对象更改为使用Float
个对象而不是基本类型。我不认为我需要对页面做任何事情以适应这个。
但是,当我进行更改时,我收到以下错误:
/pages/page.xhtml @ 79,14 value =“#{row.targetValue}”:java.lang.IllegalArgumentException:参数类型不匹配
和
/pages/page.xhtml @ 79,14 value =“#{row.targetValue}”:java.lang.IllegalArgumentException:java.lang.ClassCastException@1449aa1
页面如下所示:
<ice:inputText value="#{row.targetValue}" size="4">
<f:convertNumber pattern="###.#" />
</ice:inputText>
我也尝试在<f:convert convertId="javax.faces.Float" />
添加,但这似乎也不起作用!也没有将值对象类型更改为Double
。
我确信我可能错过了一些非常简单的东西,但我现在已经盯着这一段时间了,没有答案立即显而易见!
答案 0 :(得分:4)
经过一些调查(例如here,here和here)<f:convertNumber>
是问题所在。它转换为的数字似乎取决于您给出的输入 - 它可以是整数或浮点数。换句话说,它不会查看目标类型 - 它只是生成java.lang.Number的实例。这不是理想的,虽然我无法确定这是因为我正在使用旧版本的JSF或EL或类似的东西。
似乎有三种解决方案:
java.lang.Number
作为您的值对象类型; <f:convertNumber>
。不幸的是,由于其他原因,#1不适合我,我现在不想编写自己的转换器。但是,如果我更改代码以删除convertNumber,一切似乎都正常。 (我还将值对象类型更新为Double
,这是我在其中一个链接中建议的。)
这可以防止异常,看起来JSF仍然在做我想做的事情。只是觉得你似乎无法在同一个实例中指定convertNumber
和转换类型。