Ah oui j'étais bien à l'ouest
Celà m'apprendra à lire 1 ligne sur 4 !
Toutes mes excuses pour le dérangement
Ah oui j'étais bien à l'ouest
Celà m'apprendra à lire 1 ligne sur 4 !
Toutes mes excuses pour le dérangement
Oui, en fait je bosse pas seule sur le projet....et on ne choisi pas tours tout....
Donc, bon, cette classe est là... et du coup je l'utilise
Pas d'autre moyen...?
En meme temps c'est vrai que en regardant le source, il parait dur de changer autrement la constante...public static final String LOCAL_PROPERTIES
Mais il est bizarre que Struts ne permette pas de faire cela par un autre moyen que de modifier directement dans les sources de la displaytag...
N'oubliez pas que l'eau ça rouille !
est votre ami !
euh... Struts n'a rien avoir là-dedans.... ;-)
c'est juste qu'il y a un manque dans DisplayTag...
pour être le plus propre voici ce que je ferai :
en ayant changé la class TableProperties :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 public class MaServletInit extends HttpServlet { public void init() throws ServletException { String displayTagPath = this.getInitParameter("displaytag.path"); // si tu as le jar commons-lang if (StringUtils.isNotEmpty(displayTagPath) { // sinon if (displayTagPath != null && !displayTagPath.equals("")) { TableProperties.LOCAL_PROPERTIES = displayTagPath + TableProperties.LOCAL_PROPERTIES; } }
suppression du mot clé "final".
Code : Sélectionner tout - Visualiser dans une fenêtre à part public static String LOCAL_PROPERTIES = "displaytag";
ainsi, tu rends indépendant du code le répertoire de stockage de tes fichiers de conf de displayTag.... mais ça n'empêche pas de faire ton propre jar...!
Heu perso cette ligne est toujours nulle.... (je teste déjà ca sans avoir reconstruit un jar en changeant la ligne
en
Code : Sélectionner tout - Visualiser dans une fenêtre à part public static final String LOCAL_PROPERTIES = "displaytag";
dans la classe TableProperties ...
Code : Sélectionner tout - Visualiser dans une fenêtre à part public static String LOCAL_PROPERTIES = "displaytag";
EDIT : ou cherche-t-il les paramètres en appelant la méthode getInitParameter (faut que j'ajoute un truc dans le web.xml...?)
N'oubliez pas que l'eau ça rouille !
est votre ami !
En effet, il faut :
1) dans le web.xml :
(ou bien, plus simplement, le mettre dans un properties chargé au chargement de l'appli...)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 <web-app...> <servlet> <servlet-name>MonActionServlet</servlet-name> <display-name>action<display-name> <display-class>com.X.XX.XXX.XXXX.MonActionServlet<display-class> ... <init-param> <param-name>displaytag.path</param-name> <param-value>/properties</param-value> <init-param> <servlet> </web-app>
2) dans l'ActionServlet
2.1) on récupère le param spécifié dans le web.xml :
... ou si on l'avait mis dans un properties, on le récupère....
Code : Sélectionner tout - Visualiser dans une fenêtre à part String displayTagPath = this.getInitParameter("displaytag.path");
2.2) on vérifie que la chaîne récupérée est initialisée
2.3) puis on init le TableProperties.LOCAL_PROPERTIES :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 // si tu as le jar commons-lang if (StringUtils.isNotEmpty(displayTagPath) { // sinon if (displayTagPath != null && !displayTagPath.equals("")) {
TableProperties.LOCAL_PROPERTIES = displayTagPath + TableProperties.LOCAL_PROPERTIES;
}
N'oubliez pas que l'eau ça rouille !
est votre ami !
Finalement pour le projet, il a été décidé de se contenter de la langue française dans le properties, donc j'ai suivi la solution que j'ai explicitée précédemment (la prmiere, avec le MonActionServlet.class.getResourceAsStream("chemin");
Mais du coup je me suis dit que j'allais tout de même tester le truc pour l'internationalisation.... et ca ne marche pas : j'ai l'erreur suivante à l'execution :
J'ai mis un point d'arrêt dans ma class TableProperties (la nouvelle que j'ai créée), et l'erreur provient de la ligne en rouge et gras dans le code suivant (code de la fonction loadBuiltInProperties de la classe TableProperties ) :
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 exception org.apache.jasper.JasperException org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:370) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264) javax.servlet.http.HttpServlet.service(HttpServlet.java:802) org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:1085) org.apache.struts.action.RequestProcessor.processForwardConfig(RequestProcessor.java:398) org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:241) org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196) org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414) javax.servlet.http.HttpServlet.service(HttpServlet.java:689) javax.servlet.http.HttpServlet.service(HttpServlet.java:802) cause mère java.lang.NullPointerException java.util.Properties$LineReader.readLine(Properties.java:365) java.util.Properties.load(Properties.java:293) org.displaytag.properties.TableProperties.loadBuiltInProperties(TableProperties.java:414) org.displaytag.properties.TableProperties.<init>(TableProperties.java:548) org.displaytag.properties.TableProperties.getInstance(TableProperties.java:627) org.displaytag.export.ExportViewFactory.<init>(ExportViewFactory.java:56) org.displaytag.export.ExportViewFactory.getInstance(ExportViewFactory.java:79) org.displaytag.tags.TableTag.doStartTag(TableTag.java:709) org.apache.jsp.jsp.trtlot.quotasUtilisateurs.QuotaTrtlotListe_jsp._jspx_meth_display_table_0(org.apache.jsp.jsp.trtlot.quotasUtilisateurs.QuotaTrtlotListe_jsp:1073) org.apache.jsp.jsp.trtlot.quotasUtilisateurs.QuotaTrtlotListe_jsp._jspx_meth_html_html_0(org.apache.jsp.jsp.trtlot.quotasUtilisateurs.QuotaTrtlotListe_jsp:284) org.apache.jsp.jsp.trtlot.quotasUtilisateurs.QuotaTrtlotListe_jsp._jspService(org.apache.jsp.jsp.trtlot.quotasUtilisateurs.QuotaTrtlotListe_jsp:105) org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97) javax.servlet.http.HttpServlet.service(HttpServlet.java:802) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:322) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264) javax.servlet.http.HttpServlet.service(HttpServlet.java:802) org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:1085) org.apache.struts.action.RequestProcessor.processForwardConfig(RequestProcessor.java:398) org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:241) org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196) org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414) javax.servlet.http.HttpServlet.service(HttpServlet.java:689) javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
Une idée de pourquoi?
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 /** * Loads default properties (TableTag.properties). * @return loaded properties * @throws TablePropertiesLoadException if default properties file can't be found */ private static Properties loadBuiltInProperties() throws TablePropertiesLoadException { Properties defaultProperties = new Properties(); try { defaultProperties.load(TableProperties.class.getResourceAsStream(DEFAULT_FILENAME)); } catch (IOException e) { throw new TablePropertiesLoadException(TableProperties.class, DEFAULT_FILENAME, e); } return defaultProperties; }
N'oubliez pas que l'eau ça rouille !
est votre ami !
Je ne l'ai pas changé le DEFAULT_FILENAME : il vaut "TableTag.properties"...
code du source de TableProperties.java :
Il est censé servir à quoi ce default file????
Code : Sélectionner tout - Visualiser dans une fenêtre à part public static final String DEFAULT_FILENAME = "TableTag.properties"; //$NON-NLS-1$
Normalement, le seul truc à configurer devrait être le dossier du fichier displaytag.properties...non ?
N'oubliez pas que l'eau ça rouille !
est votre ami !
Alors, du nouveau, j'ai fait du débug ce matin....
J'ai changéen
Code : Sélectionner tout - Visualiser dans une fenêtre à part public static final String DEFAULT_FILENAME = "TableTag.properties"; //$NON-NLS-1$et dans mon refletAction j'ai mis :
Code : Sélectionner tout - Visualiser dans une fenêtre à part public static String DEFAULT_FILENAME = "TableTag.properties"; //$NON-NLS-1$
Et là, ca a l'air de tout bien fonctionner jusqu'à l'appel de la méthode doEndTag (j'ai vérifié en mode debug, tous mes trucs sont bien valorisés dana la bonne langue....)
Code : Sélectionner tout - Visualiser dans une fenêtre à part TableProperties.DEFAULT_FILENAME = "/properties/displaytag.properties"
Mais à partir de doEndTag ca merde : j'ai l'erreur suivante qui s'affiche sur ma jsp :
Je ne vois pas trop comment m'en sortir
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 exception javax.servlet.ServletException: getDecoratorFactoryInstance org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:848) org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:781) org.apache.jsp.jsp.trtlot.quotasUtilisateurs.QuotaTrtlotListe_jsp._jspService(org.apache.jsp.jsp.trtlot.quotasUtilisateurs.QuotaTrtlotListe_jsp:114) org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97) javax.servlet.http.HttpServlet.service(HttpServlet.java:802) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:322) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264) javax.servlet.http.HttpServlet.service(HttpServlet.java:802) org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:1085) org.apache.struts.action.RequestProcessor.processForwardConfig(RequestProcessor.java:398) org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:241) org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196) org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414) javax.servlet.http.HttpServlet.service(HttpServlet.java:689) javax.servlet.http.HttpServlet.service(HttpServlet.java:802) cause mère java.lang.NoSuchMethodError: getDecoratorFactoryInstance org.displaytag.tags.TableTag.doEndTag(TableTag.java:1188) org.apache.jsp.jsp.trtlot.quotasUtilisateurs.QuotaTrtlotListe_jsp._jspx_meth_display_table_0(org.apache.jsp.jsp.trtlot.quotasUtilisateurs.QuotaTrtlotListe_jsp:1110) org.apache.jsp.jsp.trtlot.quotasUtilisateurs.QuotaTrtlotListe_jsp._jspx_meth_html_html_0(org.apache.jsp.jsp.trtlot.quotasUtilisateurs.QuotaTrtlotListe_jsp:284) org.apache.jsp.jsp.trtlot.quotasUtilisateurs.QuotaTrtlotListe_jsp._jspService(org.apache.jsp.jsp.trtlot.quotasUtilisateurs.QuotaTrtlotListe_jsp:105) org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97) javax.servlet.http.HttpServlet.service(HttpServlet.java:802) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:322) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264) javax.servlet.http.HttpServlet.service(HttpServlet.java:802) org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:1085) org.apache.struts.action.RequestProcessor.processForwardConfig(RequestProcessor.java:398) org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:241) org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196) org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414) javax.servlet.http.HttpServlet.service(HttpServlet.java:689) javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
N'oubliez pas que l'eau ça rouille !
est votre ami !
question :
pourquoi modifies-tu la constante TableProperties.DEFAULT_FILENAME?
car, dans les post précédents, je te disais de modifier la constante TableProperties.LOCAL_PROPERTIES ?
si dans ta servlet d'initialisation, tu fais :
après avoir mis:
Code : Sélectionner tout - Visualiser dans une fenêtre à part TableProperties.LOCAL_PROPERTIES = "/properties/" + TableProperties.LOCAL_PROPERTIES
est-ce que ça fonctionne?
Code : Sélectionner tout - Visualiser dans une fenêtre à part public static String LOCAL_PROPERTIES = "displaytag"; //$NON-NLS-1$
Bah non, justement, ca merdouille si je fais ca...
Ca me donne une erreur due au fait de la valeur qu'a à ce moment la constante TableProperties.DEFAULT_FILENAME
N'oubliez pas que l'eau ça rouille !
est votre ami !
tu as du modifié la class TableProperties...
qu'as-tu fait ensuite?
as-tu remplacé la class dans le jar?
as-tu refait un jar?
as-tu copié l'ensemble des class du projet DisplayTag dans ton projet?
qu'as-tu fait du displaytag.properties initial fourni dans le jar?
J'ai simplement créé un package org.displaytag.properties, dans lequel j'ai créé une classe TableProperties qui est la même que celle fournie dans les jar de la displaytag, à ceci près que j'ai :
à la place de
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 public static String DEFAULT_FILENAME = "TableTag.properties"; public static String LOCAL_PROPERTIES = "displaytag";
et que du coup dans mon action je fais ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 public static final String DEFAULT_FILENAME = "TableTag.properties"; public static final String LOCAL_PROPERTIES = "displaytag";
- un set de DEFAULT_FILENAME à la valeur /properties/displaytag.properties
- un set de la valeur LOCAL_PROPERTIES à la valeur /properties/displaytag
...
Normalement, la classe prise en compte lors de l'execution est, de cette manière, la classe réécrite...
Mai si je ne fais pas de set de DEFAULT_FILENAME à la valeur /properties/displaytag.properties, alors le truc plante (il lui est impossible d'éxécuter :
car TableProperties.class.getResourceAsStream(DEFAULT_FILENAME) est null(je l'ai vue en test en debug)
Code : Sélectionner tout - Visualiser dans une fenêtre à part defaultProperties.load(TableProperties.class.getResourceAsStream(DEFAULT_FILENAME));
=> du coup j'ai ajouté le set de DEFAULT_FILENAME à la valeur /properties/displaytag.properties et là tout marche jusque le doEndTag()...
N'oubliez pas que l'eau ça rouille !
est votre ami !
question toute bête : quelle version de DisplayTag utilises-tu?
car je n'ai pas les mêmes sources que toi ;-)
c'est pour ça qu'on ne se comprend pas ;-)
C'est la version 1.1 ... dsl j'avais zappé de préciser....
Le jar displaytag porte le nom displaytag-1.1.jar
EDIT : La fonction doEndTag n'est pas dans la class tableProperties... c'est les trucs liés à la tld... enfin, j'aborde tout juste le sujet, je suis pas vraiment renseignée là-dessus, mais c'est les trucs de fonction doStartTag et doEndTag qui sont définies rapport avec la tld (suis pas une experte sur le sujet...)
N'oubliez pas que l'eau ça rouille !
est votre ami !
oki... je vais regarder ce soir (ou avant, si j'ai le temps, mais ça m'étonnerait) avec la 1.1 et je te tiens au courant
a+
il y a un pb...
je viens de télécharger la version 1.1 et le code de la class TableProperties.java est :
c'est différent de ce que tu as écrit plus haut? comment ça se fait?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 public final class TableProperties implements Cloneable { /** * name of the default properties file name ("displaytag.properties"). */ public static final String DEFAULT_FILENAME = "displaytag.properties"; //$NON-NLS-1$ /** * The name of the local properties file that is searched for on the classpath. Settings in this file will override * the defaults loaded from TableTag.properties. */ public static final String LOCAL_PROPERTIES = "displaytag"; //$NON-NLS-1$
pour le doEndTag... tu peux mettre des points d'arrêt dans les class du package org.display.tags ;-)
Je suis trop blonde lol
En fait j'ai pris les src directement ici, en étant persuadé que c'était celle de la 1.1 (dans l'url on a bien le 11, mais bon comme quoi....)... mais tu as raison, je viens de télécharger le src directement depuis le lien que tu m'as passé, et visiblement c'est pas la même chose...
Bon, je vais retester, je te tiens au courant
N'oubliez pas que l'eau ça rouille !
est votre ami !
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager