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:
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
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>
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 <%@ 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'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
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; } }
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
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"); } }
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 <%@ 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>
Plusieurs choses m'interpellent:
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 !
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'instructionde l'ActionForm !?
Code : Sélectionner tout - Visualiser dans une fenêtre à part return this.m_username;
Si nécessaire voici le "web.xml":
Voilà, mon exposé est un peu long mais j'espère qu'avec ces infos quelqu'un pourra m'aider.
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>
A+
Partager