Почему h: inputText не использует локаль по умолчанию для преобразования чисел? - PullRequest
2 голосов
/ 14 апреля 2011

У меня есть несколько полей h:inpuText для хранения чисел. Все десятичные значения показаны с помощью «.» в качестве разделителя, хотя у меня есть следующая запись в face-config.xml :

<locale-config>
     <default-locale>de</default-locale>
</locale-config>

и звонок

FacesContext.getCurrentInstance().getViewRoot().getLocale()

возвращает "де".

Однако, если я добавлю <f:convertNumber/> к своему h:inputText, будет показан правильный десятичный разделитель (например, 6,2 вместо 6,2).

Нужно ли добавлять f:convertNumber ко всем полям ввода или есть способ без?

Спасибо за вашу помощь!

1 Ответ

2 голосов
/ 14 апреля 2011

По умолчанию используется формат toString для числа с плавающей запятой.

Рассмотрим свойство компонента foo:

public class MyBean implements Serializable {
  private double foo;
  public double getFoo() { return foo; }
  public void setFoo(double foo) { this.foo = foo; }
}

inputText не имеет прямогоподдержка типов номеров;ему будет предоставлен объект (java.lang.Double) и вызовет toString для него на выходе.При отправке формы браузер отправляет String, а язык выражений приводит его к двойному значению в соответствии с его правилами приведения типов (см. Спецификацию EL).

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

...