JSF浮点转换

时间:2010-02-16 14:13:47

标签: jsf exception floating-point converter

我在这个项目中使用了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

我确信我可能错过了一些非常简单的东西,但我现在已经盯着这一段时间了,没有答案立即显而易见!

1 个答案:

答案 0 :(得分:4)

经过一些调查(例如hereherehere<f:convertNumber>是问题所在。它转换为的数字似乎取决于您给出的输入 - 它可以是整数或浮点数。换句话说,它不会查看目标类型 - 它只是生成java.lang.Number的实例。这不是理想的,虽然我无法确定这是因为我正在使用旧版本的JSF或EL或类似的东西。

似乎有三种解决方案:

  1. 使用java.lang.Number作为您的值对象类型;
  2. 编写自己的转换器;
  3. 请勿使用<f:convertNumber>
  4. 不幸的是,由于其他原因,#1不适合我,我现在不想编写自己的转换器。但是,如果我更改代码以删除convertNumber,一切似乎都正常。 (我还将值对象类型更新为Double,这是我在其中一个链接中建议的。)

    这可以防止异常,看起来JSF仍然在做我想做的事情。只是觉得你似乎无法在同一个实例中指定convertNumber和转换类型。