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 :
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)
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.



J'utilise le fichier struts suivant :
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>
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
 
...
<bean id="config" class="web.Config" init-method="init">
	<property name="service" ref="service"/>
</bean>
...
Voici le bean Config:
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