Защо h:inputText не използва локал по подразбиране за преобразуване на числа?

Имам няколко h:inpuText полета за съхранение на числа. Всички десетични стойности се показват с "." като разделител, въпреки че имам следния запис в faces-config.xml:

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

и обаждането

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

връща "de".

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

Трябва ли да добавя f:convertNumber към всички мои полета за въвеждане или има начин без това?

Благодаря за вашата помощ!


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


Отговори (1)


Форматът по подразбиране е форматът toString за числото с плаваща запетая.

Разгледайте свойството на bean 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 и Expression Language го принуждава обратно към двоен според правилата си за принуда на типа (вижте спецификацията на EL).

За по-сложна логика е необходим конвертор. Това е мощен модел, тъй като можете да преобразувате към/от всякакъв тип, без да е необходимо управлението на входа/изхода да поддържа преобразуването.

person McDowell    schedule 14.04.2011
comment
Добре благодаря. Винаги съм мислил, че numberConverter се използва автоматично за inputText полета с value="#{bean.someNumberType}" - person Matt Handy; 14.04.2011