Bonjour,
Débutant en struts, j'ai des difficultés pour accéder à la couche métier de mon application (spring, hibernate, struts).
Lors de l'appel de la classe action, j'obtiens l'erreur suivante :
A l'appel du bean Config, je vois que je récupère bien la liste des personnes de la base de données mais ensuite, je ne les récupère pas dans ma classe action. Pourriez vous m'indiquer ce qui cloche ? Merci d'avance pour votre aide.
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 java.lang.NullPointerException web.actions.Login.identifierUsers(Login.java:37) sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) java.lang.reflect.Method.invoke(Unknown Source) com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:453) com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:292) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:255) org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:256) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249) com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:176) com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249) com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:265) org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68) com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249) com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:138) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249) com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:211) com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249) com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:211) com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249) com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:190) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249) org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:75) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249) org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:90) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249) org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:243) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249) com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:100) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249) com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:141) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249) com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:145) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249) com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:171) com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249) com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:176) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249) org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249) com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:192) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249) com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:187) com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249) org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:54) org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:511) org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:432)
J'utilise le fichier struts suivant :
Parmi les différents beans de l'application, j'en ai créé un pour lier la couche web à la couche métier :
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 <struts> <!-- internationalisation --> <constant name="struts.custom.i18n.resources" value="messages" /> <constant name="struts.devMod" value="true" /> <constant name="struts.enable.DynamicMethodInvocation" value="true" /> <!-- intégration Spring --> <constant name="struts.objectFactory.spring.autoWire" value="name" /> <!-- actions Struts /Tiles --> <package name="default" namespace="/" extends="struts-default"> <!-- action par défaut --> <default-action-ref name="index" /> <action name="index"> <result type="redirectAction"> <param name="actionName">Accueil</param> <param name="namespace">/</param> </result> </action> <action name="Accueil"> <result name="success">/vues/Accueil.jsp</result> </action> <action name="Login" class="web.actions.Login" method="identifierUsers"> <result name="success">/vues/Success.jsp</result> <result name="error">/vues/Erreur.jsp</result> </action> </package> </struts>
Voici le bean Config:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 ... <bean id="config" class="web.Config" init-method="init"> <property name="service" ref="service"/> </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 public class Config { // couche metier initialisee par Spring private IService service; private List<Personne> personnes; // erreurs private Exception initException; // constructeur public Config() { } // methode Spring d'initialisation de l'objet public void init() { System.out.println("config init"); // on demande la recuperation des utilisateurs try { personnes = service.getAllPersonne(); System.out.println("personnes : " + personnes); } catch (Exception ex) { initException = ex; } } + getters et setters
Voici la classe action:
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 public class Login extends ActionSupport { // configuration initialisée par Spring private Config config; // liste des personnes private List<Personne> personnes; // liste des erreurs private List<Erreur> erreurs; // saisie private String identifiant; private String password; public Login() { } // authentification public String identifierUsers() { boolean estAuthentifie=false; System.out.println("identifiant : " + identifiant); System.out.println("password : " + password); // on créé un nouveau model personnes = config.getPersonnes(); System.out.println("personnes : " + personnes); Iterator<Personne> i1 = personnes.iterator(); while (i1.hasNext()) { Personne pers = i1.next(); if ((pers.getIdentifiant().equals(identifiant)) && (pers.getPassword().equals(password))) { estAuthentifie = true; return SUCCESS; } } return ERROR; } + getters et setters
Partager