6 floating-point jsf exception 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>
Run Code Online (Sandbox Code Playgroud)
我也试过<f:convert convertId="javax.faces.Float" />
在那里加入,但这似乎也不起作用!也没有将值对象类型更改为Double
.
我敢肯定我可能错过了一些非常简单的东西,但我现在已经盯着这一段时间了,没有答案立即显而易见!
小智 4
经过一番调查(例如参见此处、此处和此处),这<f:convertNumber>
就是问题所在。它转换成的数字似乎取决于您提供的输入 - 它可以是整数或浮点数。换句话说,它不查看目标类型 - 它只是生成 java.lang.Number 的实例。这不太理想,尽管我无法确定这是否是因为我在某个地方使用了旧版本的 JSF 或 EL 或类似的东西。
似乎有三种解决方案:
java.lang.Number
您的值对象类型;<f:convertNumber>
.不幸的是,由于其他原因,#1 不适合我,而且我现在不想编写自己的转换器。但是,如果我更改代码以删除 ConvertNumber,一切似乎都可以正常工作。Double
(我还更新了我查看的链接之一中建议的值对象类型)。
这可以防止出现异常,并且看起来 JSF 仍在做我希望它做的事情。只是令人烦恼的是,您似乎无法convertNumber
在同一实例中指定转换类型。