Я использую 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
.
Я уверен, что, вероятно, пропускаю что-то действительно простое, но я уставился на это некоторое время теперь, и никакие ответы не сразу очевидны!
После некоторых исследований (см., например, здесь, здесь и здесь) выяснилось, что проблема заключается в
. Похоже, что число, в которое оно преобразуется, зависит от того, какие данные вы ему передаете - это может быть целое число или число с плавающей точкой. Другими словами, он не смотрит на целевой тип - он просто генерирует экземпляр java.lang.Number. Что вряд ли идеально, хотя я не могу определить, связано ли это с тем, что где-то я использую старую версию JSF или EL или что-то в этом роде.
Кажется, есть три решения:
java.lang.Number
в качестве типа объекта значения;
. К сожалению, №1 для меня не подходит по другим причинам, а писать свой собственный конвертер я пока не хочу. Однако если я изменю код, чтобы убрать convertNumber, все будет работать нормально. (Я также изменил тип объекта значения на Double
, что было предложено в одной из ссылок, которые я просмотрел).
Это предотвращает исключения, и похоже, что JSF все еще делает то, что я хочу. Только раздражает, что, похоже, нельзя указать convertNumber
и тип преобразования в одном и том же экземпляре.