[英]JSF Float Conversion
我在这里的项目中使用了JSF 1.2和IceFaces 1.8。
我有一个页面,它基本上是一大堆浮点数字段的大编辑网格。 这是通过页面上的inputText
字段实现的,该字段指向具有原始float
类型的值对象
现在,由于新要求看到某些字段可以为空,我想更改value对象以使用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
。
我敢肯定我可能错过了一些非常简单的东西,但我现在已经盯着这一段时间了,没有答案立即显而易见!
经过一些调查(参见此处 , 此处和此处 ), <f:convertNumber>
是问题所在。 它转换为的数字似乎取决于您给出的输入 - 它可以是整数或浮点数。 换句话说,它不会查看目标类型 - 它只是生成java.lang.Number的实例。 这不是理想的,虽然我无法确定这是因为我正在使用旧版本的JSF或EL或类似的东西。
似乎有三种解决方案:
java.lang.Number
作为您的值对象类型; <f:convertNumber>
。 不幸的是,由于其他原因,#1不适合我,我现在不想编写自己的转换器。 但是,如果我更改代码以删除convertNumber,一切似乎都正常。 (我还将值对象类型更新为Double
,这是我在其中一个链接中建议的)。
这可以防止异常,看起来JSF仍然在做我想做的事情。 只是烦恼,似乎你不能在同一个实例中指定convertNumber
和转换类型。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.