Плавающее преобразование JSF

Я использую JSF 1.2 с IceFaces 1.8 в проекте здесь.

У меня есть страница, которая является в основном большой сеткой редактирования для целого набора полей числа с плавающей запятой. Это реализовано с inputText поля на странице, указывающей на значение, возражают с примитивом float типы

Теперь, когда новое требование видит, что некоторые поля nullable, я хотел изменить объект значения использовать Float объекты, а не типы примитивов. Я не думал, что должен буду сделать что-либо к странице для размещения этого.

Однако, когда я вношу изменение, я получаю следующую ошибку:

/pages/page.xhtml @79,14 значений = "# {row.targetValue} ": java.lang. IllegalArgumentException: несоответствие типа аргумента

И

/pages/page.xhtml @79,14 значений = "# {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.

Я уверен, что, вероятно, пропускаю что-то действительно простое, но я уставился на это некоторое время теперь, и никакие ответы не сразу очевидны!

6
задан mskfisher 11 May 2012 в 15:02
поделиться

1 ответ

После некоторых исследований (см., например, здесь, здесь и здесь) выяснилось, что проблема заключается в . Похоже, что число, в которое оно преобразуется, зависит от того, какие данные вы ему передаете - это может быть целое число или число с плавающей точкой. Другими словами, он не смотрит на целевой тип - он просто генерирует экземпляр java.lang.Number. Что вряд ли идеально, хотя я не могу определить, связано ли это с тем, что где-то я использую старую версию JSF или EL или что-то в этом роде.

Кажется, есть три решения:

  1. Использовать java.lang.Number в качестве типа объекта значения;
  2. Написать свой собственный конвертер;
  3. Не использовать .

К сожалению, №1 для меня не подходит по другим причинам, а писать свой собственный конвертер я пока не хочу. Однако если я изменю код, чтобы убрать convertNumber, все будет работать нормально. (Я также изменил тип объекта значения на Double, что было предложено в одной из ссылок, которые я просмотрел).

Это предотвращает исключения, и похоже, что JSF все еще делает то, что я хочу. Только раздражает, что, похоже, нельзя указать convertNumber и тип преобразования в одном и том же экземпляре.

4
ответ дан 17 December 2019 в 07:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: