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

Servlets/JSP Java Discussion :

[DisplayTag] configurer le chemin du displaytag.properties


Sujet :

Servlets/JSP Java

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    372
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 372
    Points : 239
    Points
    239
    Par défaut [DisplayTag] configurer le chemin du displaytag.properties
    Bonjour!

    Petit problème technique auquel j'ai décidé de m'attaquer plus sérieusement aujourd'hui
    J'utilise la lib displaytag, et donc, pour personnaliser mes tableaux, j'ai redéfini le fichier displaytag.properties.
    Mon souci est que théoriquement il faut mettre ce fichier dans le WEB-INF/classes.
    Mais moi je souhaite que celui-ci (pour des questions de packaging) soit dans WEB-INF/classes/properties. Càd dans le dossier avec tous les autres fichiers properties )
    Mais si je le met dans ce dossier comment paramétrer quoi pour que ce fichier soit pris en compte?

    Je bosse avec Eclipse lomboz 3.1.1, mon serveur est le serveur Tomcat 5.5, et le jdk est le 1.4.2 update 8.
    Tout marche nickel avec le bon fichier lorsque je le place sous WEB-INF/classes, mais ce dernier n'est évidemment pas pris en compte lorsque il est sous WEB-INF/classes/properties...


    Quelqu'un une idée?
    N'oubliez pas que l'eau ça rouille !
    est votre ami !

  2. #2
    Membre averti

    Profil pro
    Inscrit en
    Mars 2007
    Messages
    392
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 392
    Points : 439
    Points
    439
    Par défaut
    oui, c'est possible... je l'ai fait... il faut utiliser la méthode setUserProperties
    voici globalement la technique :
    1) créer une servlet d'initialisation InitServlet avec load-on-startup=1 dans le fichier web.xml
    2) InitServlet extends HttpServlet
    3) méthode init() de la class :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Properties p = ...; // mettre dans p le fichier displaytag.properties à l'emplacement que tu veux
    org.displaytag.properties.TableProperties.setUserProperties(p);
    et zouuuuuu le tour est joué.
    L'avantage de cette méthode, c'est que tu peux mettre ce fichier de config ailleurs que dans le classpath... comme par exemple dans WEB-INF/config... avec les autres fichiers de config de l'appli, et mettre en paramètre de la servlet dans le fichier web.xml l'emplacement du fichier properties.

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    372
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 372
    Points : 239
    Points
    239
    Par défaut
    Properties p = ...; // mettre dans p le fichier displaytag.properties à l'emplacement que tu veux
    ... Est-il possible de créer un new properties en parcourant l'arborescence en relatif (je veux dire de pas spécifier le chemin absolu du fichier.... )

    Parce que en fait, je ne sais pas sous quel sys d'exploitation sera mon serveur => le chemin absolu je ne le connais donc pas....

    Parce que apparemment pour créer mon Properties, je dois :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Propertie p = new Properties();
    InputStream inStream = new InputStream (?????);
    p.load(inStream )
    et je ne vois pas comment faire...
    Je voulais faire un truc comme ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Propertie p = new Properties();
    File file = new File(path);
    FileInputStream inStream = null; 
    try {
    	inStream = new FileInputStream(file);
    } catch (Exception e) {
    	// gestion de l'exception
    }
    p.load(inStream);
    Mais le pb c que "path" (en violet dans le code) est normalement un chemin absolu.....
    N'oubliez pas que l'eau ça rouille !
    est votre ami !

  4. #4
    Membre averti

    Profil pro
    Inscrit en
    Mars 2007
    Messages
    392
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 392
    Points : 439
    Points
    439
    Par défaut
    si ton fichier est dans le classpath, tu peux utiliser la méthode getResourceAsStream

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Properties p = new Properties();
    InputStream is = TaClass.class.getResourceAsStream(path);
    if (is != null) {
      p.load(is);
      is.close();
    }

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    372
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 372
    Points : 239
    Points
    239
    Par défaut
    J'ai fait un test :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    File file = new File("fileName");
    String abspath = file.getAbsolutePath();
    System.out.println(abspath );
    abspath vaut la valeur suivante :
    C:\Document and Settings\utilisateur\Desktop\fileName
    Donc non, mon fichier ne se trouve pas dans le classpath....
    Comment puis-je donc faire?
    N'oubliez pas que l'eau ça rouille !
    est votre ami !

  6. #6
    Membre averti

    Profil pro
    Inscrit en
    Mars 2007
    Messages
    392
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 392
    Points : 439
    Points
    439
    Par défaut
    Où as-tu mis le fichier displaytag.properties?
    [edit]
    dans ton 1er message, tu as écris que le fichier était dans le répertoire "properties"....
    as-tu essayé dans la servlet d'initialisation d'écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    InputStream is = TaClass.class.getResourceAsStream("/properties/displaytag.properties");
    normalement, ça devrait fonctionner, non?
    [/edit]

  7. #7
    Membre actif
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    372
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 372
    Points : 239
    Points
    239
    Par défaut
    Le truc que je voudrais surtout comprendre, cest :
    "qu'est ce qui fixe le path "C:\Document and Settings\utilisateur\Desktop" ?
    Parce que si j'arrive à changer moi-même cela (en java dans mon action), c'est bingo!!!!!

    EDIT : mon fichier est dans un répertoire properties se trouvant dans un répertoire parent du ServletContext...
    N'oubliez pas que l'eau ça rouille !
    est votre ami !

  8. #8
    Membre averti

    Profil pro
    Inscrit en
    Mars 2007
    Messages
    392
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 392
    Points : 439
    Points
    439
    Par défaut
    as-tu testé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    InputStream is = TaClass.class.getResourceAsStream("/properties/displaytag.properties");
    est-ce que ça fonctionne?

    Pour ta question :
    Citation Envoyé par AnneB Voir le message
    Le truc que je voudrais surtout comprendre, cest :
    "qu'est ce qui fixe le path "C:\Document and Settings\utilisateur\Desktop" ?
    tu peux lire la javadoc :
    By default the classes in the java.io package always resolve relative pathnames against the current user directory. This directory is named by the system property user.dir, and is typically the directory in which the Java virtual machine was invoked
    mais ce n'est pas une solution que d'obtenir le chemin absolu du fichier.... tu n'en n'as pas besoin, tant que le fichier que tu souhaites rechercher est dans le classpath, ce qui est le cas si ton fichier est dans WEB-INF/classes/properties comme tu le disais dans le 1er post de ton message.

  9. #9
    Membre actif
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    372
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 372
    Points : 239
    Points
    239
    Par défaut
    Donc en fait mon fichier properties se trouve dans un dossier parent du dossier WEB-INF. Mais quand je build mon projets, un dossier properties est créé et dedans est créé mon fichier properties :
    WEB-INF/classes/properties...

    Je voudrais bien tester mais je ne vois pas par quoi remplace "TaClass" ...
    N'oubliez pas que l'eau ça rouille !
    est votre ami !

  10. #10
    Membre averti

    Profil pro
    Inscrit en
    Mars 2007
    Messages
    392
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 392
    Points : 439
    Points
    439
    Par défaut
    Citation Envoyé par AnneB Voir le message
    Je voudrais bien tester mais je ne vois pas par quoi remplace "TaClass" ...
    As-tu créé une servlet d'initialisation comme je te l'ai suggéré dans mon 1er post?
    Si oui, dans la méthode init() de cette class, tu remplaces le "TaClass" par le nom de la Servlet que tu as choisi.
    Sinon, bah, tu dois créer cette servlet et la configurer dans le fichier web.xml comme écris plus haut....

  11. #11
    Membre actif
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    372
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 372
    Points : 239
    Points
    239
    Par défaut
    Alors, ca marche commeca , avec "TaClass" la classe ou j'écris le bout de code, càd dans ma classe MonActionServlet qui hérite de ActionServlet....

    Le seul pb maintenant, c'est pour l'internationnalisation : comment faire depuis la ActionServlet pour récupérer la locale?
    N'oubliez pas que l'eau ça rouille !
    est votre ami !

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    442
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 442
    Points : 540
    Points
    540
    Par défaut
    Dans ton action struts tu fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Locale locale = getLocale(request);

  13. #13
    Membre actif
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    372
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 372
    Points : 239
    Points
    239
    Par défaut
    Je souhaite en fait récupérer ma Locale depuis ma classe MonActionServlet, qui hérite de ActionServlet, classe ne disposant pas de la méthode getLocale, et ne connaissant aucun objet de type HttpServletRequest => impossible d'utiliser getLocale()

    (Pour Duc Lebowski, je ne suis pas dans une classe qui hérite de la classe Action)

    Je me posais une tite question :
    Est-ce que le fait d'avoir fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    InputStream inStream = MonActionServlet.class.getResourceAsStream("displaytag.properties");
    Properties p = new Properties ();
    if(inStream !=null){
    try{
    p.load(inStream );
    inStream.close();
    org.displaytag.properties.TableProperties.setUserProperties(p);
    }
    catch(IOException e){
    e.printStackTrace();
    }
    }
    Est ce que du coup, par le TableProperties.setUserProperties(p); on a la gestion de l'internationnalisation qui est faite
    Par exemple, si je me connecte en anglais et que dans le meme dossier que mon displaytag.properties, j'ai un displaytag_EN.properties, est ce qu'il prendra tout seul en compte le displaytag_EN.properties ?
    N'oubliez pas que l'eau ça rouille !
    est votre ami !

  14. #14
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    442
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 442
    Points : 540
    Points
    540
    Par défaut
    Citation Envoyé par AnneB Voir le message
    Je souhaite en fait récupérer ma Locale depuis ma classe MonActionServlet, qui hérite de ActionServlet, classe ne disposant pas de la méthode getLocale, et ne connaissant aucun objet de type HttpServletRequest => impossible d'utiliser getLocale()

    (Pour Duc Lebowski, je ne suis pas dans une classe qui hérite de la classe Action)
    Me suis planté, confondu Action et ActionServlet

    Par contre il est surprenant que tu ne connaisses pas le request dans ton action... parce que sinon tu pourrais aussi faire request.getLocale()

  15. #15
    Membre actif
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    372
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 372
    Points : 239
    Points
    239
    Par défaut
    Citation Envoyé par Duc Lebowski Voir le message
    Par contre il est surprenant que tu ne connaisses pas le request dans ton action... parce que sinon tu pourrais aussi faire request.getLocale()
    Comme je le disais dans mon précédent post, c'est dans l'ActionServlet que je suis et que je n'ai pas d'objet request!!!!!!!!
    N'oubliez pas que l'eau ça rouille !
    est votre ami !

  16. #16
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    442
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 442
    Points : 540
    Points
    540
    Par défaut
    Je vais passer pour un gros lourd mais... Qu'est-ce que tu fous dans une ActionServlet ?!

    Et sinon je suis désolé mais vu que ActionServlet extends HttpServlet, à toi de redéfinir doGet(request, response) et doPost(request, response) et récupérer la locale au passage avec request.getLocale(). Donc ActionServlet connaît bien le request !

  17. #17
    Membre actif
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    372
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 372
    Points : 239
    Points
    239
    Par défaut
    Je suis dans mon ActionServlet pour initialiser le chemin du fichier displaytag.properties. Ce fichier n'est pas (comme c'est le cas dans un projet struts classique) dans WEB-INF/casses, mais dans WEB-INF/classes/properties.....
    Et cela c'est fixé dans le projet, par les clients=> pas poss de changer

    Donc j'initialise le chemin dans le méthode init() de MonActionServlet....
    Par contre, il me semble bien que cette méthode init() est appelée uniquement au démarage du serveur.... et donc je ne vois pas trop quoi faire pour que l'internationnalisation du displaytag.properties marche...
    N'oubliez pas que l'eau ça rouille !
    est votre ami !

  18. #18
    Membre averti

    Profil pro
    Inscrit en
    Mars 2007
    Messages
    392
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 392
    Points : 439
    Points
    439
    Par défaut
    en fait, je te disais de créer une servlet qui extends HttpServlet, pas forcément ActionServlet (ça n'apporte rien... voir ça complique)
    sinon, en lisant le source de la class TableProperties, la méthode setUserProperties ne gère pas la locale.
    tu ne peux pas par cette méthode avoir des fichiers displaytag.properties i18n.
    tu as une autre solution : modifier la class TableProperties et la constante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public static final String LOCAL_PROPERTIES = "displaytag";
    en
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public static final String LOCAL_PROPERTIES = "properties/displaytag";
    et mettre la class modifiée dans le jar displayatg... et alors, tu n'as plus besoin de créer la servlet et d'utiliser le setUserProperties()...

  19. #19
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    442
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 442
    Points : 540
    Points
    540
    Par défaut
    L'internationalisation consiste à afficher les messages dans la langue de l'utilisateur (enfin dans la langue du navigateur internet de l'utilisateur plus précisément). Au démarrage de ton serveur (méthode init()), tu ne sais pas quelle est la langue de tes utilisateurs (et si ils parlent tous la même langue).

    La première fois que tu connais la langue de l'utilisateur c'est lors de sa première requête HTTP (le navigateur injecte dans l'en-tête HTTP sa langue). Tu ne peux donc l'avoir que dans l'objet HttpServletRequest... et tu ne l'aura jamais au démarrage du serveur.

    Maintenant si ils parlent tous la même langue tu peux le définir une fois pour toute ou le paramétrer dans le web.xml lorsque tu déclare ta servlet (dans un <init-param/>).

  20. #20
    Membre averti

    Profil pro
    Inscrit en
    Mars 2007
    Messages
    392
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 392
    Points : 439
    Points
    439
    Par défaut
    Très cher Duc Lebowski,
    Anne B est confronté à une problématique précise... pas l'internationalisation en tant que telle.
    En effet, elle utilise le framework displaytag.
    Ce framework utilise un fichier de resource : displaytag.properties.
    Ce fichier peut être internationalisé en displaytag_fr_FR.properties... et automatiquement en fonction de la Locale positionnée dans la request, le bon fichier de resource sera utilisé.

    Le framework DisplayTag recherche les fichiers displaytag.properties et displaytag_(pays).properties uniquement à la racine du classpath.

    L'architecture de l'application d'Anne B impose que les fichiers de configuration de DisplayTag soient dans le répertoire properties du classpath.

    Le framework DisplayTag permet de spécifier un autre emplacement pour le chargement des fichiers de configuration par l'appel de la méthode static TableProperties.setUserProperties(), mais comme il est spécifié dans la javadoc :
    Note: setUserProperties() MUST BE CALLED before the first TableProperties instantation.
    , je proposais de spécifier le fichier properties dans une servlet d'initialisation... à l'époque, Anne B n'avait pas spécifié sa demande d'internationalisation.

    Pour résoudre son problème d'internationalisation, elle doit surcharger la class TableProperties comme je le propose dans le post précédent.

Discussions similaires

  1. Configurer un chemin de répertoire
    Par Sceptique dans le forum Format d'échange (XML, JSON...)
    Réponses: 11
    Dernier message: 19/05/2013, 21h05
  2. Configurer un chemin ou mettre une BDD pendant l’installation
    Par kika10 dans le forum Composants VCL
    Réponses: 0
    Dernier message: 05/05/2011, 18h11
  3. Réponses: 2
    Dernier message: 22/12/2009, 16h10
  4. [DisplayTag] probleme d'export avec displaytag
    Par D.Mounir dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 05/05/2007, 14h24
  5. Configurer le chemin par défaut de recherche des images (balise <img src>)
    Par DJ Caësar 9114 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 06/03/2007, 08h00

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