2011-01-20 5 views
5

J'ai implémenté l'internationalisation dans mon application JSF comme décrit here.JSF setLocale ne fonctionne pas correctement

Mais j'ai rencontré un problème: lorsque je change les paramètres régionaux, tous les textes de ma page changent. Mais si je clique sur un lien de navigation pour accéder à une autre page, les paramètres régionaux retournent aux paramètres régionaux standard!

Je pense que quelque chose me manque ici. Donc je donne mon code ci-dessous et nous espérons que vous pouvez aider:

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 partie (il fait partie de mon modèle):

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

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

J'ai ensuite Text.java du tutoriel et seulement changé bundle-path.

Voici mon répertoire:

Si quelque chose d'important manque le demander s'il vous plaît.

Répondre

9

FacesContext est une instance de portée de requête. donc votre valeur serait définie pour cette demande particulière seulement.

ajouter sur xhtml

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

OU:

inscrire une vue Handler
dans les faces-config.xml

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

et

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


    }