2009-11-16 5 views
5

Sto scrivendo un'applicazione JSF (ICEfaces) utilizzando i pacchetti di risorse per gestire l'internazionalizzazione.Impostazione locale di formattazione in virgola mobile per JSF/ICEfaces?

L'applicazione applica in modo appropriato le impostazioni internazionali "nl" (predefinito) per il pacchetto di risorse, ma non applica le stesse impostazioni internazionali sulla formattazione di numeri in virgola mobile, anche se imposto esplicitamente le impostazioni internazionali per una pagina utilizzando <f:view locale="nl">.

Come faccio a fare in modo che i numeri in virgola mobile seguano le impostazioni locali correnti?

risposta

6

È probabile che non si stia utilizzando un convertitore sui numeri format nelle impostazioni internazionali appropriate.

<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> 

Questo punto di vista (la vista locale olandese con un numero, seguito da un numero locale inglese) produce il seguente output:

12.341.234,43 
12,341,234.43 
+0

un piccolo test mi ha mostrato che un semplice "" sufficiente già nel mio caso. Sono perplesso sul motivo per cui JSF non formatta di default un float per le impostazioni locali correnti, ma la tua soluzione funziona come un incantesimo. Grazie! – Timo

+1

'outputText' probabilmente non ha alcun supporto diretto per i numeri; verrà assegnato un oggetto (ad esempio 'java.lang.Double') e richiamato' toString' su di esso in uscita. Anche un 'inputText' non avrà alcun supporto diretto; su input di una stringa, il linguaggio di espressione lo costringe a raddoppiare secondo le sue regole per la coercizione di tipo. Per una logica più complessa, è necessario un convertitore. Questo è un modello potente, in quanto è possibile convertire da/a qualsiasi tipo senza richiedere il controllo di input/output per supportare la conversione. – McDowell

+0

Hai ragione! Il problema è nell'implicito Java Float.toString() che non considera le impostazioni locali (anche del sistema operativo). il tag dice efficacemente all'outputText di utilizzare una conversione di stringhe con impostazioni locali. – Timo

1

È possibile utilizzare nido <convertNumber> tag e impostare l'impostazione internazionale predefinita a " nl "in faces.config.xml. In questo modo, i convertitori ottengono e utilizzano automaticamente le impostazioni internazionali predefinite e non è necessario specificare un modello per ciascun tag <convertNumber>.

faces-config.xml:

<application> 
     <locale-config> 
      <default-locale>nl</default-locale> 
     </locale-config> 
    </application>