JSF Float Conversion - PullRequest
       5

JSF Float Conversion

6 голосов
/ 16 февраля 2010

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

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

Теперь, когда новое требование видит, что некоторые поля могут быть обнуляемыми, я хотел изменить объект значения, чтобы использовать 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.

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

1 Ответ

4 голосов
/ 16 февраля 2010

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

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

  1. Используйте java.lang.Number в качестве типа вашего объекта значения;
  2. Написать свой собственный конвертер;
  3. Не используйте <f:convertNumber>.

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...