j'ai les deux avec le listener positionné en 1er dans mon web.xml
Version imprimable
j'ai les deux avec le listener positionné en 1er dans mon web.xml
C'est pas l'un ou l'autre ?
Le listener ou la servlet
et tu as aussi ?
Code:
1
2
3
4
5 <context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/applicationContext.xml</param-value> </context-param>
en fait je t'explique : je récupère ce projet
et je te confirme que j'ai les deux ...
voici le contenu
Code:
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
58
59
60
61
62
63
64
65
66
67
68
69
70
71 <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" metadata-complete="false" version="3.0"> <display-name>myApp</display-name> <welcome-file-list> <welcome-file>jsp/index.jsp</welcome-file> </welcome-file-list> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <filter> <filter-name>encodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> <init-param> <param-name>forceEncoding</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>encodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <servlet> <servlet-name>CXFServlet</servlet-name> <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>CXFServlet</servlet-name> <url-pattern>/services/*</url-pattern> </servlet-mapping> <servlet> <servlet-name>dispatcher</servlet-name> <servlet-class> org.springframework.web.servlet.DispatcherServlet </servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>dispatcher</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> <servlet> <servlet-name>Resource servlet</servlet-name> <servlet-class>org.springframework.js.resource.ResourceServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>Resource servlet</servlet-name> <url-pattern>/resources/*</url-pattern> </servlet-mapping> <servlet> <description>Apache CXF Endpoint</description> <display-name>cxf</display-name> <servlet-name>cxf</servlet-name> <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>cxf</servlet-name> <url-pattern>/services/*</url-pattern> </servlet-mapping> <session-config> <session-timeout>60</session-timeout> </session-config> </web-app>
ok,
j'allai justement te demander si tu avais la DispatcherServlet...
par contre, j'ai l'impression qu'elle n'est pas définie de façon complète..
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14 <servlet> <servlet-name>Spring MVC Dispatcher Servlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/applicationContext.xml</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>Spring MVC Dispatcher Servlet</servlet-name> <url-pattern>/spring/*</url-pattern> </servlet-mapping>
A priori le servlet mapping est bien défini
J'essaie sur un projet Web...
Je n'ai pas de problème d'initialisation,
Pour vérifier l'affectation de la valeur dateFormat du bean, j'ai testé le code dans une servlet :
et j'obtiens bien la value correspondant à la clé du fichier properties, même avec le dot dans la cléCode:
1
2
3
4
5
6 ApplicationContext ctx = ContextLoader.getCurrentWebApplicationContext(); MyClasse my=(MyClasse) ctx.getBean("myClasse"); if(my!=null){ out.print(my.getDateFormat()); }
oui heureusement que ça marche dans une Servlet
mais dans mon cas, je souhaiterais que ce soit ma classe Java MyClasse qui soit initialisée et effectivement cette classe fait partie d'une application web mais elle n'en connait pas le contexte
et je pense que le problème vient de là
A moins qu'il y ait une annotation particulière de lui indiquer ça
en tout cas merci pour ton test
Le bean est instancié et la propriété correctement valorisée au démarrage du contexte Web effectivement.
C'est ce que tu as mis dans le web.xml, et dans applicationContext.xml qui le permet.
Du coup, je ne vois pas du tout de quel emplacement tu veux y accéder, à ce bean...
Si tu fais une classe en dehors du contexte Web, utilisant ton Bean, tu y as bien accès, et le membre est correctement valorisé (après démarrage du contexte web):
Code:
1
2
3
4
5
6
7
8
9
10
11
12 public class TestBean { private MyClass myBean; public TestBean(){ ApplicationContext ctx = ContextLoader.getCurrentWebApplicationContext(); myBean=(MyClass) ctx.getBean("myClasse"); } @Override public String toString() { return "TestBean [myBean=" + myBean.getDateFormat() + "]"; } }
Salut
En fait ce que je veux dire c'est que à l'intérieur de mon bean, et à partir de ma méthode getObject la valeur de mon champ est null
quand je met un logger dans cette méthode pour afficher mon champs, le logger m'afficher null
Bonjour,
alors c'est que tu le fais avant le démarrage du contexte Web...
Ce qui n'a pas d'intérêt sur une appli Web, si ?
dans mon contexte ça peut avoir un intérêt car l'application expose un web service
ce web service peut être appeler indépendamment du reste de l'appli web
Et justement la classe qui me pose problème est appelée par le web service.
Je ne comprends pas pourquoi cette classe à besoin d'une initialisation particulière à partir du moment où je l'ai déclarée en tant que bean dans mon fichier XML ?
ok,
mais quoi de plus normal que ton appli web soit démarrée pour rendre ton service web accessible.
Si ton appli est déployée sur le serveur, le seul démarrage du serveur rend ton service accessible.
oui je suis d'accord avec toi, c'est évident
mais je ne comprends pas pourquoi mon bean n'est pas initialisé au démarrage de mon serveur web sachant que je l'ai configuré dans mon fichier de context.
En l’occurrence, j'appelle une méthode private dans ma classe qui ne trouve pas la valeur de mon champs
Mon objectif est que ce champs soit initialisé au démarrage avec une propriété issu d'un fichier de configuration
désolé à tous ceux qui ce sont dérangés
forcément vos solutions fonctionnent
Je reprend l'application et l'erreur vient d'un type qui faisait appel à ma classe et qui au lieu d'utiliser l'injection avec l'annotation @Autowired faisait appel à la classe en utilisant le constructeur par défaut et donc forcement le fields d'accès à la classe de properties n'était pas initialisé
Merci encore