2011-01-20 29 views
5

Implementé la internacionalización en mi aplicación JSF como se describe en here.JSF setLocale no funciona correctamente

Pero me encontré con un problema: cuando cambio la configuración regional, todos los textos en mi página cambian. ¡Pero si hago clic en un enlace de navegación para ir a otra página, la configuración regional salta a la configuración regional estándar!

Creo que echo algo aquí. Así que proporciono mi código de abajo y espero que puedan ayudar a:

LocaleBean.java:

@ManagedBean(name="locale") 
    @SessionScoped 
    public class LocaleBean { 

    private Locale locale = FacesContext.getCurrentInstance().getViewRoot().getLocale(); 

    public Locale getLocale() { 
     return locale; 
    } 

    public void setLanguage(String language) { 
     locale = new Locale(language); 
     FacesContext.getCurrentInstance().getViewRoot().setLocale(locale); 
    } 

    public String getLanguage() { 
     return locale.getLanguage(); 
    } 
    } 

JSF Parte (es parte de mi plantilla):

<h:outputText value=" #{text['common.language']}: " /> 
     <h:selectOneMenu value="#{locale.language}" onchange="submit()"> 
      <f:selectItem itemValue="de" itemLabel="Deutsch" /> 
      <f:selectItem itemValue="en" itemLabel="English" /> 
     </h:selectOneMenu> 

caras -config.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<faces-config 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
    http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd" 
    version="2.0"> 
    <application> 
      <locale-config> 
       <default-locale>de</default-locale> 
       <supported-locale>en</supported-locale> 
      </locale-config> 
     <resource-bundle> 
     <base-name>org.dhbw.stg.wwi2008c.mopro.ui.text</base-name> 
     <var>text</var> 
     </resource-bundle> 
    </application> 
</faces-config> 

Luego escribí Text.java del tutorial y solo cambié la ruta del paquete.

Aquí mi directorio:

Si falta algo importante lo piden por favor.

Respuesta

9

FacesContext instancia de ámbito de solicitud. por lo que su valor se establecerá solo para esa solicitud en particular.

añadir en XHTML

<f:view locale="#{locale.locale}"> 

OR:

Registrar una vista Handler
en faces-config.xml

<application> 
      ... 
     <view-handler>com.yourcompany.MyLocaleViewHandler</view-handler> 

y

public class MyLocaleViewHandler extends ViewHandler { 

    private final ViewHandler base; 


    @Override 
    public Locale calculateLocale(FacesContext context) { 
     //fetch the session scoped bean and return the 
     LocaleBean bean = (LocaleBean) context.getExternalContext().getRequest().getSession().getAttribute("locale");//this line is not tested. 
     return locale; 
    } 
     //other stuff.. 


    } 
Cuestiones relacionadas