Setting floating point formatting locale for JSF / ICEfaces?
Asked Answered
P

2

5

I am writing a JSF (ICEfaces) application using resource bundles to handle internationalisation.

The application nicely applies the (default) Dutch "nl" locale for the resource bundle but fails to apply the same locale on formatting floating point numbers, even if I explicitly set the locale for a page using <f:view locale="nl">.

How do I make floating point numbers follow the current locale setting?

Pulpboard answered 16/11, 2009 at 11:35 Comment(0)
P
6

It is likely that you are not using a converter to format the numbers to the appropriate locale.

  <f:view locale="nl">
    <h:outputText value="#{numbers.someDouble}">
      <f:convertNumber pattern="#,##0.00;(#,##0.00)" />
    </h:outputText>
    <br />
    <h:outputText value="#{numbers.someDouble}">
      <f:convertNumber locale="en" pattern="#,##0.00;(#,##0.00)" />
    </h:outputText>
  </f:view>

This view (a Dutch locale view with a number, followed by an English locale number) produces the following output:

12.341.234,43
12,341,234.43
Paulina answered 16/11, 2009 at 12:2 Comment(5)
A little test showed me that a simple "<f:convertNumber/>" already suffices in my case. I am puzzled why JSF won't by default format a float to the current locale, but your solution works like a charm. Thanks!Pulpboard
outputText probably doesn't have any direct support for numbers; it will be given an object (e.g. java.lang.Double) and call toString on it on output. An inputText won't have any direct support either; on input of a String, the Expression Language coerces it back to a double as per its rules for type coercion. For more complex logic, a converter is required. This is a powerful model, as you can convert to/from any type without requiring the input/output control to support the conversion.Paulina
You are right! The problem is in the implicit Java Float.toString() that does not consider the locale setting (of even the OS). the <f:convertNumber/> tag effectively tells the outputText to use a locale-aware string conversion.Pulpboard
@Paulina can you please explain a bit about how that pattern is interpreted? thanks in advance!Evangelize
@eljunior - if the link in the post isn't enough, ask a new question.Paulina
R
1

You can use nest <convertNumber> tag and set the default locale to "nl" in faces.config.xml. That way, the converters automatically get and use the default locale and you do not need to specify a pattern at each <convertNumber> tag.

faces-config.xml:

    <application>
        <locale-config>
          <default-locale>nl</default-locale>
        </locale-config>
    </application>
Rabah answered 16/11, 2009 at 13:31 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.