2010-10-04 17 views
4

J'ai une application où l'utilisateur peut dynamiquement basculer entre les paramètres régionaux de la page d'accueil de mon application. Je vois que le développeur précédent (hérité du code sans beaucoup de documentation) a remplacé les trois méthodes suivantes de ViewHandler et me dit que cela est nécessaire pour la commutation dynamique de la Locale ... toute aide est très appréciéeChangement de paramètres régionaux dynamiques dans une application JSF?

Aussi, faites laissez-moi savoir s'il y a une meilleure façon de gérer cette

public Locale calculateLocale(FacesContext facescontext) 
{ 
    Locale userLocale = LocaleManager.getInstance().getCurrentLocale(); 
    if (userLocale != null) 
    { 
     return userLocale; 
    } 
    else 
    { 
     return delegate.calculateLocale(facescontext); 
    } 
} 

public void renderView(FacesContext facescontext, UIViewRoot uiviewroot) 
     throws IOException, FacesException { 
    uiviewroot.setLocale(LocaleManager.getInstance().getCurrentLocale()); 
    delegate.renderView(facescontext, uiviewroot); 
} 
public UIViewRoot createView(FacesContext facescontext, String s) 
{ 
    UIViewRoot view = delegate.createView(facescontext, s); 
    view.setLocale(LocaleManager.getInstance().getCurrentLocale()); 
    return view; 
} 

Répondre

8

Ma solution est la suivante:

  • ont un bean géré scope session qui est titulaire d'un Locale exemple
  • ont le bouton ci-dessous (ou lien) pour chaque langue prise en charge:

    <h:commandButton action="#{localeBean.changeLocal}"> 
        <f:setPropertyActionListener target="#{localeBean.selectedLanguage}" 
           value="en" /> 
    </h:commandButton> 
    
  • définir les paramètres régionaux en cours en fonction de la langue passée (new Locale(lang))

  • dans votre modèle (s) utiliser <f:view locale="#{localeBean.currentLocale}">
+0

Nous vous remercions de votre suggestion. On m'a dit que (après avoir publié la question) si la vue jsf était déjà créée, la vue de restauration afficherait la vue CURRENT dans les mêmes paramètres régionaux, même si les paramètres régionaux ont été modifiés ... est-ce que votre suggestion gère cela? –

+0

La vue de restauration est une phase du cycle de vie jsf et, en tant que telle, est appelée à chaque requête. Ainsi, la prochaine requête que vous faites (après une redirection, par exemple), vous aurez votre nouvelle locale. – Bozho