Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JSF Java Discussion :

Navigation et l'internationalisation


Sujet :

JSF Java

  1. #1
    Membre actif Avatar de Elwe31
    Profil pro
    Inscrit en
    octobre 2004
    Messages
    476
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : octobre 2004
    Messages : 476
    Points : 218
    Points
    218
    Par défaut Navigation et l'internationalisation
    Bonjour,

    J'ai un problème avec l’internationalisation et la navigation.
    Lorsque je change de langue, cela fonctionne bien. mais quand je navigue sur mon site, la langue repasse par celle définie par défaut de mon navigateur.

    Cela arrive quand je fais :
    1/ index.xhtml(je change la langue) ça fonctionne.
    2/ Je change de page vers user.xhmtl, ça fonctionne toujours.
    3/ et quand je reviens sur index.xhtml, la page s'affiche dans la langue par défaut. (il faut d'ailleurs cliquer 2 fois sur le commandButton pour que la navigation fonctionne )


    Voila le face-config pour la navigation.
    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
    16
     
           <navigation-rule>
    		<from-view-id>/index.xhtml</from-view-id>
    		<navigation-case>		
    			<from-outcome>newUser</from-outcome>
    			<to-view-id>/user.xhtml</to-view-id>
    		</navigation-case>
    	</navigation-rule>
     
    	<navigation-rule>
    		<from-view-id>/user.xhtml</from-view-id>
    		<navigation-case>		 
    			<from-outcome>retour</from-outcome>
    			<to-view-id>/index.xhtml</to-view-id>		
    		</navigation-case>
    	</navigation-rule>

    Je suis preneur de toute idée !piste.

    merci d'avance
    - La communication consiste a comprendre celui qui ecoute !
    - Qui veut faire quelquechose trouve un moyen, qui ne veut rien faire trouve une excuse

  2. #2
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    novembre 2006
    Messages
    7 007
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : novembre 2006
    Messages : 7 007
    Points : 9 029
    Points
    9 029
    Billets dans le blog
    1
    Par défaut
    Comment changes-tu la locale ?
    Normalement, en JSF2, le changement s'opère sur la vue et il faut mettre une balise
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <f:view locale="#{?un manager session?}"> ... </f:view>
    dans la page template (ou toutes les pages si tu n'utilises pas de template).
    Pour le changement proprement dit, tu fais quelque chose comme ceci (la construction de "locale" est à faire)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FacesContext.getCurrentInstance().getViewRoot().setLocale(locale);
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre actif Avatar de Elwe31
    Profil pro
    Inscrit en
    octobre 2004
    Messages
    476
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : octobre 2004
    Messages : 476
    Points : 218
    Points
    218
    Par défaut
    Merci pour ta réponse.

    Oui,
    je fais ça pour le changement de langue
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FacesContext.getCurrentInstance().getViewRoot().setLocale(new Locale(newLocaleValue));

    ah Non, je ne fais de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <f:view locale="#{?un manager session?}"> ... </f:view>
    tu mets quoi dans local ? un java.util.Locale ?

    si je rajoute la balise <f:view local=#{languages.locale}">dans la balise <html>, la page en change pas de langue.

    je ne sais pas si c'est important, mais ma page index.xhtml :
    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml"
    	xmlns:h="http://java.sun.com/jsf/html"
    	xmlns:f="http://java.sun.com/jsf/core"
    	xmlns:ui="http://java.sun.com/jsf/facelets"
    	xmlns:c="http://java.sun.com/jsp/jstl/core"
    	xmlns:b="http://bootsfaces.net/ui" xmlns:p="http://primefaces.org/ui">
    <f:view locale="#{languages.locale}" id="idView">
     
    <ui:include src="/blocs/head.xhtml"></ui:include>
     
    <h:body>
    	<h:outputStylesheet library="css" name="mystyle.css" />
    ....
    ...	
    ...
    ....
    	<b:container layout="fluid" id="inputs"
    		style="background-color:white; ">
    		<h:form id="formIndex">
    			<ui:include src="/blocs/entete.xhtml"></ui:include>
    ...
    ...
    ...
    </h:body>
    </f:view>
    </html>
    et la page entente.xhtml :
    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    <?xml version='1.0' encoding='UTF-8' ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml"
    	xmlns:b="http://bootsfaces.net/ui"
    	xmlns:f="http://java.sun.com/jsf/core"
    	xmlns:h="http://java.sun.com/jsf/html"
    	xmlns:p="http://primefaces.org/ui"
    	xmlns:c="http://java.sun.com/jsp/jstl/core">
     
    <b:row style="margin-bottom:20px;margin-top:20px;">
    	<b:column span="3">
    		<p:graphicImage name="./img/logo-header-dark.png" id="imgLogoe"
    			style="margin-left:10px;margin-top:10px;width: 80%;" />
    	</b:column>
    	<!-- titre -->
    	<b:column span="4">
    		<p:outputLabel value="#{msg['site.titre']}" />
     
    	</b:column>
     
    	<!-- langues -->
    	<b:column span="2">
     
    		<p:selectOneMenu id="selectlangue" style="margin-top:10px;"
    			value="#{languages.localeCode}"
    			valueChangeListener="#{languages.countryLocaleCodeChanged}"
    			effect="fade" panelStyle="width:150px" >
     
    			<f:selectItems value="#{languages.lstLangue}" var="lg"
    				itemLabel=" #{lg.designation} " itemValue="#{lg.code}" />
     
    			<p:ajax event="change" update="@form" />
     
    		</p:selectOneMenu>
    	</b:column>
    ...
    ...
    ...
    </html>
    Merci
    - La communication consiste a comprendre celui qui ecoute !
    - Qui veut faire quelquechose trouve un moyen, qui ne veut rien faire trouve une excuse

  4. #4
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    novembre 2006
    Messages
    7 007
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : novembre 2006
    Messages : 7 007
    Points : 9 029
    Points
    9 029
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Elwe31 Voir le message
    tu mets quoi dans local ? un java.util.Locale ?
    Oui, c'est bien un objet java.util.Locale

    Je ne sais pas ce que représente ton objet référencé par #{locales} ni dans quel scope tu l'as mis mais il DOIT être en sessionScoped.
    Normalement, il devrait contenir une propriété Locale qui représente la Locale en cours pour la session et une liste de Locale pour la sélection.

    Dans ta page, tu devrais référencer la locale en cours au niveau de la balise <f:view locale="#{locales.currentLocale}">

    Pour la modification, il semble que l'interprétation de la balise view se fasse avant, du coup, avec un listener, ça ne fonctionne pas... je regarde d'où vient le problème et si je trouve quelque chose, je t'informerai.
    En attendant, ceci fonctionne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
                <p:commandLink value="Français" actionListener="#{defaultManager.changeLocale('fr', 'FR')}" oncomplete="window.location.reload()" style="color:#f0f0f0"/>
                <p:commandLink value="English" actionListener="#{defaultManager.changeLocale('en', 'EN')}" oncomplete="window.location.reload()" style="color:#f0f0f0; margin-left:5px"/>
    La méthode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
        public void changeLocale(String language, String country)
        {
            Locale locale = new Locale(language, country);
            setLocale(locale);
            getFacesContext().getViewRoot().setLocale(locale);
        }
    Avec defaultManager en sessionScoped... bizarre
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre actif Avatar de Elwe31
    Profil pro
    Inscrit en
    octobre 2004
    Messages
    476
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : octobre 2004
    Messages : 476
    Points : 218
    Points
    218
    Par défaut
    Bonjour,

    merci pour l'exemple.

    mon bean :
    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
     
    import...
     
    @ManagedBean(name="languages")
    @SessionScoped
    public class Languages implements Serializable {
    	private static final long serialVersionUID = 1L;
     
    	public final Logger logger = Logger.getLogger(Languages.class);
     
    	private String localeCode;
    	private static List<Language> lst;
    	private Locale locale;
     
    	static{
    				lst= new ArrayList<Language>();
     
    				lst.add(new Language("fr","Français"));
    				lst.add(new Language("en","English"));
    				lst.add(new Language("es","Español"));
    				lst.add(new Language("de","Deutsch"));
    				lst.add(new Language("it","Italiano"));
    }
     
    	@PostConstruct
    	public void init() {
    	locale = FacesContext.getCurrentInstance().getExternalContext().getRequestLocale();
    	localeCode = locale.getLanguage().toString();
     	logger.debug("Init : " + localeCode);
     
    	}
     
    	public void changelanguage(String newLocaleValue) {
    		logger.debug("Changement de langue : " + newLocaleValue );
     
    		for(int i=0; i< lst.size();i++) { //Vérification que le code de langue existe dans la liste
    			if(lst.get(i).getCode().equals(newLocaleValue)) {
    				locale = new Locale(newLocaleValue);
    				FacesContext.getCurrentInstance().getViewRoot().setLocale(locale);
    			}
    		}
     
    	}
     
    	public void setUserLanguage(String localeCode) {
    		changelanguage(localeCode);
    	}
     
    	//value change event listener
    	public void countryLocaleCodeChanged(ValueChangeEvent e){
    		String newLocaleValue = e.getNewValue().toString();
     
    		changelanguage(newLocaleValue);
    	}
     
        // setters et getters
    }
    je vais essayer ton code.

    encore merci
    - La communication consiste a comprendre celui qui ecoute !
    - Qui veut faire quelquechose trouve un moyen, qui ne veut rien faire trouve une excuse

  6. #6
    Membre actif Avatar de Elwe31
    Profil pro
    Inscrit en
    octobre 2004
    Messages
    476
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : octobre 2004
    Messages : 476
    Points : 218
    Points
    218
    Par défaut
    Super, ça fonctionne.
    merci
    - La communication consiste a comprendre celui qui ecoute !
    - Qui veut faire quelquechose trouve un moyen, qui ne veut rien faire trouve une excuse

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comment gérer la Navigation d'un site ?
    Par chtiboss dans le forum XML/XSL et SOAP
    Réponses: 4
    Dernier message: 22/03/2004, 14h17
  2. [Unicode] Internationalisation d'une application
    Par Thierry Laborde dans le forum Langage
    Réponses: 4
    Dernier message: 21/10/2003, 21h15
  3. [JSP][Barre de navigation] Gestion du bouton precedent
    Par lando dans le forum Servlets/JSP
    Réponses: 11
    Dernier message: 09/09/2003, 17h18
  4. Bouton de navigation
    Par thierry sache dans le forum Flash
    Réponses: 2
    Dernier message: 17/12/2002, 12h43
  5. [CR] internationalisation d'un report
    Par osoudee dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 24/06/2002, 17h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo