gpt4 book ai didi

JSF float 转换

转载 作者:行者123 更新时间:2023-12-04 15:27:59 26 4
gpt4 key购买 nike

我在这里的一个项目中使用 JSF 1.2 和 IceFaces 1.8。

我有一个页面,它基本上是一大堆浮点数字段的大编辑网格。这是通过 inputText 实现的页面上的字段指向具有原始值的值对象 float类型

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

但是,当我进行更改时,出现以下错误:

/pages/page.xhtml @79,14 value="#{row.targetValue}": java.lang.IllegalArgumentException: argument type mismatch





/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 也不会.

我敢肯定我可能遗漏了一些非常简单的东西,但我已经盯着这个看了一段时间,没有立即显而易见的答案!

最佳答案

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

似乎有三种解决方案:

  • 使用 java.lang.Number作为您的值对象类型;
  • 编写自己的转换器;
  • 不要使用 <f:convertNumber> .

  • 不幸的是,由于其他原因,#1 不适合我,而且我目前不想编写自己的转换器。但是,如果我更改代码以删除 convertNumber,一切似乎都正常。 (我还将值对象类型更新为 Double,这是我查看的其中一个链接中建议的)。

    这可以防止出现异常,而且看起来 JSF 仍在做我想要它做的事情。令人讨厌的是,您似乎无法指定 convertNumber和同一个实例中的转换类型。

    关于JSF float 转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2273461/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com