[Struts] 1ere application [RESOLU]

1ere application [RESOLU] [Struts] - Java - Programmation

Marsh Posté le 27-10-2005 à 11:06:02    

Bonjour,
 
Je tente de réaliser une application untra-simple avec Struts. Malgré la documentation, j'éprouve quelques difficultés.
 
J'ai suivi à la lettre l'exemple (pourtant tres clair) présenté ici:
http://www.infini-fr.com/Sciences/ [...] eraux.html
 
Je me connecte à un formulaire de Login ==> les informations sont copiées dans un FormBean => ... et c'est ici que rien ne va plus: la classe Action associée ne s'execute pas. Enfin, rien  ne se produit, en fait.  
Conclusion: j'arrive à une page blanche contenant le code suivant:

Citation :

<html><body></body></html>


(D'ou vient ce code?)
 
Je suis parti de l'application Struts-blank livrée avec Structs
Voici les sources:
 
login.jsp (le fichier amorce)

Citation :


<%@ page language="java" import="java.util.*"  %>
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
<html>
    <head>
        <title>Veuillez vous identifier</title>
    </head>
    <body>
 
        <h1 align="center">Veuillez votre 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>


 
le fichier LoginForm associé

Citation :


import org.apache.struts.action.*;
 
public class LoginForm extends ActionForm {
 private String m_username = "root";
 private String m_password = "azerty";
 
 public String getUsername() {
  System.out.println("On passe par UserBean.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;
 }
}


 
Le fichier LoginAction (qui ne s'execute jamais)

Citation :


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 {
        // 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" );
    }
}


 
 
Le fichier Connected.jsp:

Citation :

<%@ page language="java" import="java.util.*"  %>
<%@ 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>


 
Et pour finir, struts-config.xml ...dans ses differentes versions, qui aboutissent au meme resultat!
Version 1:

Citation :


<struts-config>
 <form-beans>
  <form-bean name="LoginForm" type="LoginForm" />
 </form-beans>
 
 <global-forwards>
  <forward name="Connected" path="/Connected.jsp" />
 </global-forwards>
 
 <action-mappings>
  <action path="/login"
   name="LoginForm"
   type="LoginAction"
   scope="request" >
  </action>
 </action-mappings>
</struts-config>


 
version2:

Citation :


<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>


 
version3:

Citation :

  <action path="/login"
   name="LoginForm"
   type="LoginAction">
   <forward name="Connected" path="/Connected.jsp" />
  </action>


 
L'exemple est quand meme archi-simple  :whistle:  
Et pourtant, pas moyen!!!
 
Il semblerait que le Bean de gestion du Formulaire soit en cause, car quand je fais le test avec un lien unique (sans Fields, sans LoginForm), ca fonctionne. Mais sur les exemples fournis dans la distribution, je ne vois pas ce qui change...  
 
Please, help  :sweat:


Message édité par Zogzog4 le 05-11-2005 à 09:00:46
Reply

Marsh Posté le 27-10-2005 à 11:06:02   

Reply

Marsh Posté le 29-10-2005 à 18:31:17    

Dans login.jsp essaye de mettre un slash devant login.do.
Sinon regarde les logs de tomcat pour voir si il ne te met pas une erreur.
Ton login.jsp et connected.jsp sont bien à la racine de l'application ?
 
Sinon je pense qu'il faut 2 actions : une pour afficher Login.jsp en tapant welcome.do (par exemple) et une autre pour afficher Connected.jsp en cliquant sur submit (action login.do). En effet, Struts passe par des actions par l'intermediaire du controlleur qui te redirige vers la vue ... je pense qu'il ne faut pas afficher directement une JSP.


Message édité par hydrogene le 29-10-2005 à 18:33:13
Reply

Marsh Posté le 29-10-2005 à 18:59:56    

Ah nan je sais c'est koi : la methode dans l'Action c'est pas perform mais execute !

Reply

Marsh Posté le 31-10-2005 à 09:08:02    

hydrogene a écrit :

Ah nan je sais c'est koi : la methode dans l'Action c'est pas perform mais execute !


 
Merci beaucoup :)
Effectivement, de nombreux exemples utilsent "execute", et le manuel confirme!
J'ai simplement remplace le perform par execute, et ca a plante. Mais c'est encourageant, car au moins il y a un message d'erreur identifie sur lequel je peux travailler  :lol: . Avant, je changeais de nombreux parametres sans resultat  :fou:  
 
Merci encore  :)  
 :jap:

Reply

Marsh Posté le 31-10-2005 à 10:05:58    

Ok, ca fonctionne!
Je tournais autour depuis des jours, et je n'avais pas remarque le "perform"!
Un grand merci!  :)  :jap:

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed