我在这里的项目中使用的是带有IceFaces 1.8的JSF 1.2。
我有一个页面,该页面基本上是用于一大堆浮点数字段的大型编辑网格。这是通过页面上的inputText
字段实现的,该字段指向具有原始float
类型的值对象
现在,由于一项新要求看到某些字段是可为空的,因此我想将value对象更改为使用Float
对象而不是原始类型。我认为我不需要对页面做任何事情来适应这一点。
但是,当我进行更改时,出现以下错误:
和
该页面如下所示:
<ice:inputText value="#{row.targetValue}" size="4">
<f:convertNumber pattern="###.#" />
</ice:inputText>
我也尝试过在其中添加
<f:convert convertId="javax.faces.Float" />
,但这似乎也不起作用!将值对象类型更改为Double
也不行。我敢肯定我可能会遗漏一些非常简单的东西,但是我已经盯着它看了一阵子了,没有答案是显而易见的!
最佳答案
经过一些调查(例如here,here和here),<f:convertNumber>
是问题所在。它似乎转换为数字取决于您给它的输入-它可以是整数或浮点数。换句话说,它不查看目标类型,而只是生成java.lang.Number的实例。尽管我无法确定这是否是因为我在某个地方使用的是旧版本的JSF或EL或类似的东西,但这并不理想。
似乎有三种解决方案:
java.lang.Number
作为您的值对象类型; <f:convertNumber>
。 不幸的是,由于其他原因,我无法选择#1,而且我现在不想编写自己的转换器。但是,如果我更改代码以删除convertNumber,则一切似乎正常。 (我还将值对象类型更新为
Double
,这在我查看的链接之一中已建议)。这样可以防止出现异常,并且JSF似乎仍在按照我想要的去做。只是令人讨厌,似乎您无法在同一实例中指定
convertNumber
和convert类型。