代码之家  ›  专栏  ›  技术社区  ›  user7094

JSF浮点转换

  •  6
  • user7094  · 技术社区  · 16 年前

    我在这里的一个项目中使用JSF1.2和IceFaces1.8。

    我有一个页面,基本上是一个大的编辑网格,有一大堆浮点数字段。这是通过以下方式实现的: inputText 页面上指向带有基元的值对象的字段 float 类型

    现在,由于一个新的需求看到一些字段是可为空的,所以我想更改要使用的value对象 Float 对象而不是基元类型。我认为我不需要对页面做任何事情来适应这一点。

    /pages/page.xhtml@79,14 value=“#{row.targetValue}”:java.lang.IllegalArgumentException:参数类型不匹配

    页面如下所示:

    <ice:inputText value="#{row.targetValue}" size="4">
      <f:convertNumber pattern="###.#" />
    </ice:inputText>
    

    我也试着加入 <f:convert convertId="javax.faces.Float" /> 在那里也一样,但这似乎也不起作用!将值对象类型更改为 Double .

    我肯定我可能错过了一些非常简单的东西,但我已经盯着它看了一段时间了,没有任何答案是显而易见的!

    1 回复  |  直到 14 年前
        1
  •  4
  •   user7094 user7094    16 年前

    经过一些调查(参见。 here , here here <f:convertNumber> 这就是问题所在。它转换成的数字似乎取决于您给它的输入-它可以是整数或浮点数。换句话说,它不看目标类型——它只生成java.lang.Number的一个实例。这并不理想,尽管我无法确定这是否是因为我在某处使用了旧版本的JSF或EL或类似的东西。

    似乎有三种解决方案:

    1. 使用 java.lang.Number
    2. 编写自己的转换器;
    3. <f:convertNumber>

    不幸的是,出于其他原因,1不是我的选择,我现在不想编写自己的转换器。但是,如果我更改代码以删除convertNumber,一切似乎都正常(我还将值对象类型更新为 Double 这是在我看到的一个链接中提出的)。

    convertNumber 和同一实例中的转换类型。

    推荐文章