IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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

Struts 1 Java Discussion :

[Struts][I18N] Comment recharger les fichiers de ressouces [FAQ]


Sujet :

Struts 1 Java

  1. #1
    Membre du Club Avatar de romdelf
    Profil pro
    Inscrit en
    Février 2005
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2005
    Messages : 91
    Points : 62
    Points
    62
    Par défaut [Struts][I18N] Comment recharger les fichiers de ressouces
    Bonjour
    Je modifie certains éléments dans les fichiers de langue et je souhaite recharger ces derniers afin que mon messageRessources soit correct (identique aux fichiers)!
    (En gros, je supprime, modifie ou ajoute des clés avec leur valeur dans les fichiers de langue...)

    Normalement, il faut redémarrer l'application. Sinon, j'ai trouvé sur Internet ce code mais il ne marche apparemment pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    MessageResourcesFactory factory = MessageResourcesFactory.createFactory();
    MessageResources resources = factory.createResources("properties.MyApplicationResources");
     
    ServletContext ctx = getServlet().getServletContext();
    ctx.setAttribute(Globals.MESSAGES_KEY, resources);
    Est ce que quelqu'un sait comment recharger le messageResources?
    Est ce que ce code peut marcher? (qu'est ce que je fais de faux)

    Merci de votre aide

  2. #2
    Membre du Club Avatar de romdelf
    Profil pro
    Inscrit en
    Février 2005
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2005
    Messages : 91
    Points : 62
    Points
    62
    Par défaut
    Personne n'a jamais modifié un fichier de resources dans son appli?
    Ca doit bien etre possible...

  3. #3
    Membre du Club Avatar de romdelf
    Profil pro
    Inscrit en
    Février 2005
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2005
    Messages : 91
    Points : 62
    Points
    62
    Par défaut
    Je n'ai pas envie que ce sujet parte aux oubliettes....
    Je trouve le code que j'ai trouvé (et indiqué ci-dessus) correct. Mais je ne comprends pas pourquoi il ne marche pas.

    Des fois que je ne sois pas assez clair, je reexplique :
    Si je modifie une valeur des fichiers de langue (resources.properties) avec une de mes classes, est il possible de recharger le MessageResources pour que les changements soient pris en compte?

    Sinon, est ce que qq'1 a une autre solution, svp?

  4. #4
    Membre expérimenté
    Avatar de zekey
    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 036
    Points : 1 403
    Points
    1 403
    Par défaut
    Salut moi j'ai du programmé un truc similaire, il fallait charger les resources depuis la DB et permettre a tout moment à l'util de les recharger.
    La solution consiste à remplacer le gestionnaire de resources standard par le tien.

    Dans le struts-config.xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <message-resources
      factory="pms.core.util.struts.DBMessageResourcesFactory"
      key="org.apache.struts.action.MESSAGE" null="false" parameter="com.dataconnect.pms.online.config.Resources"/>
    Après il suffit de redéfinir les deux classes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public class DBMessageResourcesFactory extends PropertyMessageResourcesFactory {
        public MessageResources createResources(String config) {
            return new BasePropertyMessageResources(this, config,this.returnNull);
        }    
    }
    et
    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
     
    public class BasePropertyMessageResources extends PropertyMessageResources {
     
         public BasePropertyMessageResources(MessageResourcesFactory factory,String
         config) {
         super(factory, config);
         log.info("Initializing, config='" + config + "'");
         }
     
         public BasePropertyMessageResources(MessageResourcesFactory 	factory,String
         config, boolean returnNull) {
             super(factory, config, returnNull);
             log.info("Initializing, config='" + config +"', returnNull=" +
         returnNull);
         }
     
        public void reset(){
            try{
                messages.clear(); 
                locales.clear(); 
                formats.clear();
            }catch(Exception e){
                DefaultExceptionHandler.handleException(getClass(), e);            
            }
        }
     
    	protected HashMap locales = new HashMap();
     
    	protected static final Log log=LogFactory.getLog(BasePropertyMessageResources.class);
     
    	public String getMessage(String pLogin, String pPassword, Locale pLocale, String pKey){
    		return (String)PmsResourceService.getInstance().getResource(pLogin, pPassword, pLocale.getLanguage(), pKey);
    	}
     
    	public String getMessage(Locale pLocale, String pKey){
    		return (String)PmsResourceService.getInstance().getResource(Application.getDbUser() , Application.getDbPasswd(), pLocale.getLanguage(), pKey);
    	}	
     }
    Du coup tu as accèss à tout et tu peux à tout moment relancer un reset.
    Voilà il faut que tu l'adapte mais le principe y est[/img]

  5. #5
    Membre du Club Avatar de romdelf
    Profil pro
    Inscrit en
    Février 2005
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2005
    Messages : 91
    Points : 62
    Points
    62
    Par défaut
    Ahhh ca fait plaisir d'avoir une reponse
    J'adapte ton code et j'essaie (mais ca va me prendre un moment...)

    Merci encore

  6. #6
    Membre du Club Avatar de romdelf
    Profil pro
    Inscrit en
    Février 2005
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2005
    Messages : 91
    Points : 62
    Points
    62
    Par défaut
    Salut ze_key
    J'ai adapté ton code. Merci. Par contre, je n'arrive pas à lancer le reset.
    pourrais tu stp me donner un exemple de ton code qui le fait?

    Je ne vois pas si je dois recuperer le MessageResources de mon Action, ou bien si je dois creer une nouvelle instance de la Factory (que tu m'as donnée) pour faire un reset....

    Merci encore!

  7. #7
    Membre expérimenté
    Avatar de zekey
    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 036
    Points : 1 403
    Points
    1 403
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    BasePropertyMessageResources propMsg=(BasePropertyMessageResources)request.getSession().getServletContext().getAttribute("org.apache.struts.action.MESSAGE");
    propMsg.reset();

  8. #8
    Membre expérimenté
    Avatar de zekey
    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 036
    Points : 1 403
    Points
    1 403
    Par défaut
    Concernant le org.apache.struts.action.MESSAGE; il et possible que cela soit dépendant de la version de Struts. a vérifier.

  9. #9
    Membre du Club Avatar de romdelf
    Profil pro
    Inscrit en
    Février 2005
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2005
    Messages : 91
    Points : 62
    Points
    62
    Par défaut
    C'est tout simplement PARFAIT!!!!

    Merci beaucoup

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 25/08/2009, 17h34
  2. Plus de partitions, comment récupérer les fichiers
    Par Michaël dans le forum Administration système
    Réponses: 6
    Dernier message: 01/06/2005, 21h41
  3. [CF][PPC/C#] Comment lister les fichiers d'un répertoire ?
    Par dady dans le forum Windows Mobile
    Réponses: 18
    Dernier message: 20/05/2005, 15h35
  4. [Forms6i] Comment charger les fichiers du client ?
    Par patmaba dans le forum Forms
    Réponses: 10
    Dernier message: 31/01/2005, 17h17
  5. Réponses: 4
    Dernier message: 13/12/2004, 21h37

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