Bonjour à tous.
J'ai un problème assez ennuyeux dans mon application.
Je dois avoir la possibilité, en passant par un paramètre "lang" dans mon url de changer la langue à appliquer dans l'application.
Je m'occupe de faire ce changement dans un Listener, executé juste après un SessionTimedOutListener qui ne modifie en rien la locale.
En fait j'ai essayé dans mon second Listener toute une série de méthode comme celle-ci:
Et mon ViewHandler personnalisé:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 Locale locale = new Locale((String) extCtx.getRequestParameterMap().get("lang")); extCtx.getSessionMap().put("locale", locale); //First set the viewroot, with the language received from the client. ViewHandler viewHandler = facesCtx.getApplication().getViewHandler(); UIViewRoot viewRoot = viewHandler.createView(facesCtx, "/pages/welcome.jsp"); viewRoot.setLocale(locale); facesCtx.setViewRoot(viewRoot);
En débug, je vois que la Locale est correcte partout... seulement ma page ne s'affiche que dans la langue par défaut du browser!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 public class MyViewHandler extends JspViewHandlerImpl { /** * {@inheritDoc} */ @SuppressWarnings("unchecked") @Override public Locale calculateLocale(FacesContext context) { Map<String, Object> session = context.getExternalContext().getSessionMap(); Locale l = (Locale) session.get("locale"); return l != null ? l : super.calculateLocale(context); } }
Pourquoi mes vues ne font-elles pas appel au bon bundle? Ou plutôt, comment font-elles alors?
Merci d'avance pour votre réponse!
Partager