Bonjour J'ai une application Struts2 où les actions struts ont été définies dans le fichier struts.xml. Maintenant, je tiens à confier cette tâche à spring afin d'avoir des actions avec un scope session.

- Cas 1: si j'utilise annotation @Repository ("myAction") j'ai toujours le message d'erreur: Unable to instantiate Action, myAction, defined for 'doAction' in namespace '/omb'doAction

- Cas n ° 2: si je déclare l'action dans le fichier applicationContext.xml, j'ai un NullPointerException à l'appel de la ligne myService.callMethode (); car myService est null.

Comment je peux faire cela en utilisant des annotations ? Dans mon application il y en a partout et ce serai trop long de redéfinir tous les services dans le applicationContext.xml

struts.xml :

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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
<?xml version="1.0" encoding="UTF-8" ?>
 
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
	<constant name="struts.devMode" value="false" />
	<constant name="struts.action.extension" value="do" />
	<constant name="struts.custom.i18n.resources" value="com.omb.i18n.StrutsResourceBundle" />
	<constant name="struts.objectFactory" value="org.apache.struts2.spring.StrutsSpringObjectFactory" /> 
	<constant name="struts.objectFactory.spring.autoWire" value="name" />
	<constant name="struts.i18n.encoding" value="ISO-8859-1" />
	<constant name="struts.i18n.reload" value="false" />
	<constant name="struts.configuration.xml.reload" value="false" />
	<constant name="struts.locale" value="fr" />
	<constant name="struts.multipart.maxSize" value="100000000000" />
	<constant name="struts.enable.SlashesInActionNames" value="true" />
    <constant name="struts.mapper.alwaysSelectFullNamespace" value="false"/>
 
    <constant name="struts.codebehind.classSuffix" value="Controller"/>
	<constant name="struts.codebehind.action.checkImplementsAction" value="false"/>
	<constant name="struts.codebehind.action.checkAnnotation" value="false"/>
	<constant name="struts.codebehind.action.defaultMethodName" value="index"/>
	<constant name="struts.configuration.classpath.defaultParentPackage" value="rest-default" />
 
	<package name="default" extends="tiles-default" namespace="/">
 
		<interceptors>
 
			<interceptor name="params-filter"
				class="com.opensymphony.xwork2.interceptor.ParameterFilterInterceptor" />
 
			<interceptor-stack name="defaultStack">
				<interceptor-ref name="exception" />
				<interceptor-ref name="alias" />
				<interceptor-ref name="servletConfig" />
				<interceptor-ref name="i18n" />
				<interceptor-ref name="chain" />
				<interceptor-ref name="modelDriven" />
				<interceptor-ref name="fileUpload">
					<param name="maximumSize">11204928</param>
				</interceptor-ref>
				<interceptor-ref name="staticParams" />
				<interceptor-ref name="conversionError" />
				<interceptor-ref name="params" />
				<interceptor-ref name="prepare" />
				<interceptor-ref name="validation" />
				<interceptor-ref name="workflow" />
			</interceptor-stack>
 
		</interceptors>
 
		<default-interceptor-ref name="defaultStack" />
 
		<global-results>
			<result name="technicalError" type="chain">
				errorAction
			</result>
			<result name="sessionInvalidError" type="tiles">
				sessionInvalid
			</result>
			<result name="blank" type="tiles">blank</result>
		</global-results>
 
		<global-exception-mappings>
			<exception-mapping exception="java.lang.Exception"
				result="technicalError" />
			<exception-mapping
				exception="com.omb.service.exception.UserSessionInvalidException"
				result="sessionInvalidError" />
 
		</global-exception-mappings>
 
	</package>
 
	<package name="omb" extends="default" namespace="/omb">
		<action name="doAction" class="myAction" method="{1}">
			<result name="success" type="redirectAction">
				<param name="namespace">/omb</param>
				<param name="actionName">displayResult</param>
			</result>
			<result name="error" type="redirectAction">
				<param name="namespace">/error</param>
				<param name="actionName">displayError</param>
			</result>
		</action>
	</package>
</struts>
web.xml :
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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
 
<?xml version="1.0" encoding="ISO-8859-1"?>
 
<!DOCTYPE web-app
    PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
    "http://java.sun.com/dtd/web-app_2_3.dtd">
 
<web-app>
 
	<display-name>MyApplication</display-name>
	<description>Application OMB</description>
 
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>
			classpath:applicationContext.xml,
			classpath:applicationContext-web.xml
		</param-value>
	</context-param>
 
	<context-param>
		<param-name>org.apache.tiles.DEFINITIONS_CONFIG</param-name>
		<param-value>/WEB-INF/tiles/tiles-defs.xml</param-value>
	</context-param>
 
	<context-param>
		<param-name>struts.ajax.debug</param-name>
		<param-value>${struts.ajax.debug}</param-value>
	</context-param>
 
	<filter>
		<filter-name>Acegi Filter Chain Proxy</filter-name>
		<filter-class>
			org.acegisecurity.util.FilterToBeanProxy
		</filter-class>
		<init-param>
			<param-name>targetClass</param-name>
			<param-value>
				org.acegisecurity.util.FilterChainProxy
			</param-value>
		</init-param>
	</filter>
 
	<filter>
    	<filter-name>struts2</filter-name>
    	<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
	</filter>
 
	<filter-mapping>
		<filter-name>Acegi Filter Chain Proxy</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
 
	<filter-mapping>
		<filter-name>struts2</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
 
	<!-- Java Melody filter mapping -->   
    <filter-mapping>     
          <filter-name>monitoring</filter-name>     
          <url-pattern>/*</url-pattern>   
    </filter-mapping>
 
	<listener>
		<listener-class>
			com.omb.listener.ApplicationListener
		</listener-class>
	</listener>
 
	<listener>
		<listener-class>
			org.apache.struts2.tiles.StrutsTilesListener
		</listener-class>
	</listener>
 	
	<!--  listener>
		<listener-class>
			org.springframework.web.context.ContextLoaderListener
		</listener-class>
	</listener-->
	<listener>
		<listener-class>
			org.springframework.web.context.request.RequestContextListener
		</listener-class>
	</listener>
 
	<welcome-file-list>
		<welcome-file>index.jsp</welcome-file>
	</welcome-file-list>
</web-app>
MyAction.java
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
 
package com.omb.actions;
 
@Repository("myAction")
@Scope("session")
public class MyAction extends ActionSupport {
 
    @Qualifier("myService")
    private MyService myService;
 
    public String execute() throws Exception {
		myService.callMethode();
        return SUCCESS;
    }
 
 
    public MyService getMyService() {
        return this.myService;
    }
 
    public void setMyService(MyService myService) {
        this.myService = myService;
    }
}