Je débute en Struts sous Eclipse.
Après avoir installé le FrameWork Struts, j'essaie de faire fonctionner un petit exemple que j'ai trouvé sur le net.
Le problème c'est que la classe Action ne semble pas être appelée.

Ce petit exemple demande à l'utilisateur de s'identifier et vérifie l'identifiant saisit. Voici les sources:

struts-config.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
 
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC
         "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN"
         "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">
<struts-config>
	<form-beans>
		<form-bean name="LoginForm" type="LoginForm" />
	</form-beans>
	<action-mappings>
		<action	path="/login"
			name="LoginForm"
			type="LoginAction"
			scope="request" >
		    <forward name="Connected" path="/Connected.jsp" />
		</action>
	</action-mappings>
</struts-config>
Login.jsp (requête de l'utilisateur):
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
 
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
<html>
    <head></head>
    <body>
        <h1 align="center">Veuillez vous identifier</H1>
        <div align="center">
            <html:form action="login.do" method="POST" focus="username">
                Logon : <html:text property="username" /> <BR/>
                Password : <html:password property="password" /> <BR/>
                <html:submit property="submit" />
	    </html:form>
        </div>
    </body>
</html>
L'ActionForm "LoginForm.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
25
26
27
 
import org.apache.struts.action.*;
 
import javax.servlet.http.*;
 
 
public class  LoginForm extends ActionForm {
	private String m_username = "root";
	private String m_password = "azerty";
 
	public String getUsername() {
		System.out.println("On passe par LoginForm.getUsername !");
		return this.m_username;
	}
	public void setUsername(String username) {
		System.out.println("On passe par UserBean.setUsername !");
		this.m_username = username;
	}
	public String getPassword() {
		System.out.println("On passe par UserBean.getPassword !");
		return this.m_password;
	}
	public void setPassword(String password) {
		System.out.println("On passe par UserBean.setPassword !");
		this.m_password = password;
	}
}
L'Action "LoginAction.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
 
import javax.servlet.http.*;
import org.apache.struts.action.*;
 
public class LoginAction extends Action {
 
    public ActionForward perform(
	ActionMapping mapping, ActionForm _form,
	HttpServletRequest request, HttpServletResponse response
    ) throws Exception {
    	System.out.println("Entrée dans LoginAction.perform...");
        // On traite la requête cliente
	LoginForm form = (LoginForm) _form;
	System.out.println("Struts in action "
	     + form.getUsername() + " - " + form.getPassword());
        // On redirige vers la vue adaptée
	return mapping.findForward("Connected");
    }
}
et enfin la jsp de confirmation "Connected.jsp":
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
 
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
<html>
    <head>
	<title>Confirmation de connexion</title>
    </head>
    <body>
        <h1 align="center">Confirmation de connexion</H1>
 
        <div align="center">
	        Bonjour Mr <bean:write name="LoginForm" property="username" />
        </div>
 
    </body>
</html>
Voici le résultat de la console (on voit bien que le message en entrant dans l'action n'apparait pas):
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
 
17 août 2006 17:48:39 org.apache.catalina.core.AprLifecycleListener lifecycleEvent
INFO: The Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: C:\Program Files\Java\jre1.5.0_06\bin;...
17 août 2006 17:48:40 org.apache.coyote.http11.Http11BaseProtocol init
INFO: Initialisation de Coyote HTTP/1.1 sur http-8080
17 août 2006 17:48:40 org.apache.catalina.startup.Catalina load
INFO: Initialization processed in 1042 ms
17 août 2006 17:48:40 org.apache.catalina.core.StandardService start
INFO: Démarrage du service Catalina
17 août 2006 17:48:40 org.apache.catalina.core.StandardEngine start
INFO: Starting Servlet Engine: Apache Tomcat/5.5.17
17 août 2006 17:48:40 org.apache.catalina.core.StandardHost start
INFO: XML validation disabled
17 août 2006 17:48:41 org.apache.coyote.http11.Http11BaseProtocol start
INFO: Démarrage de Coyote HTTP/1.1 sur http-8080
17 août 2006 17:48:41 org.apache.jk.common.ChannelSocket init
INFO: JK: ajp13 listening on /0.0.0.0:8009
17 août 2006 17:48:41 org.apache.jk.server.JkMain start
INFO: Jk running ID=0 time=0/80  config=null
17 août 2006 17:48:41 org.apache.catalina.storeconfig.StoreLoader load
INFO: Find registry server-registry.xml at classpath resource
17 août 2006 17:48:41 org.apache.catalina.startup.Catalina start
INFO: Server startup in 1852 ms
On passe par LoginForm.getUsername !
On passe par UserBean.getPassword !
On passe par UserBean.setPassword !
On passe par UserBean.setUsername !
Plusieurs choses m'interpellent:
1.« struts-template.tld » est défini dans web.xml n’existe pas physiquement dans les jar du FrameWork Struts !
2. Au niveau de la classe "public class LoginForm extends ActionForm {", J'ai un l'avertissement suivant “The serializable class LoginForm does not declare a static final serielVersionUOD field of type long” ?
3. Quand je débug j'ai un message "Source not found" “NativeMethodAccessorImpl.invoke(Object, Object[]) line: not available” sur l'instruction
Code : Sélectionner tout - Visualiser dans une fenêtre à part
return this.m_username;
de l'ActionForm !?


Si nécessaire voici le "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
 
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC
                 "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN"
                 "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
    <display-name>StrutsWAR</display-name>
    <servlet>
        <servlet-name>action</servlet-name>
        <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
        <init-param>
            <param-name>config</param-name>
            <param-value>/WEB-INF/struts-config.xml</param-value>
        </init-param>
        <init-param>
            <param-name>debug</param-name>
            <param-value>2</param-value>
        </init-param>
        <init-param>
            <param-name>application</param-name>
            <param-value>ApplicationResources</param-value>
        </init-param>
        <load-on-startup>2</load-on-startup>
    </servlet>
 
    <servlet-mapping>
        <servlet-name>action</servlet-name>
        <url-pattern>*.do</url-pattern>
    </servlet-mapping>
 
    <taglib>
        <taglib-uri>/WEB-INF/struts-bean.tld</taglib-uri>
        <taglib-location>/WEB-INF/struts-bean.tld</taglib-location>
    </taglib>
    <taglib>
        <taglib-uri>/WEB-INF/struts-html.tld</taglib-uri>
        <taglib-location>/WEB-INF/struts-html.tld</taglib-location>
    </taglib>
    <taglib>
        <taglib-uri>/WEB-INF/struts-logic.tld</taglib-uri>
        <taglib-location>/WEB-INF/struts-logic.tld</taglib-location>
    </taglib>
    <taglib>
        <taglib-uri>/WEB-INF/struts-template.tld</taglib-uri>
        <taglib-location>/WEB-INF/struts-template.tld</taglib-location>
    </taglib>
</web-app>
Voilà, mon exposé est un peu long mais j'espère qu'avec ces infos quelqu'un pourra m'aider.

A+