Почему h: inputText не использует локаль по умолчанию для преобразования чисел?

У меня есть несколько полей h:inpuText для хранения чисел. Все десятичные значения отображаются с "." в качестве разделителя, хотя у меня есть следующая запись в faces-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 ко всем полям ввода или есть способ обойтись без этого?

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


person Matt Handy    schedule 14.04.2011    source источник


Ответы (1)


Формат по умолчанию — это формат 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).

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

person McDowell    schedule 14.04.2011
comment
Спасибо. Я всегда думал, что numberConverter автоматически используется для полей inputText с value="#{bean.someNumberType}" - person Matt Handy; 14.04.2011