[Struts]Affichage de messages d'erreur avec html:errors

Affichage de messages d'erreur avec html:errors [Struts] - Java - Programmation

Marsh Posté le 12-04-2007 à 10:32:01    

Bonjour à tous,
 
Je suis sur un projet de jeu accessible depuis le WAP (donc WML).
J'utilise le framework Struts pour le développer.
 
Voilà mon problème: je souhaite afficher des messages d'erreurs dans le cas où des informations sont incorrectes lors de la validation d'un formulaire.
J'ai suivi pas mal de tutoriels mais rien n'y fait, ils ne veulent pas s'afficher.
 
Commençons donc par le début et struts-config.xml

Code :
  1. <action
  2.             input="/partieCommune/wap/connexionJeu.jsp"
  3.             name="ValiderConnexionActionForm"
  4.             path="/login"
  5.             scope="session"
  6.             type="com.opensugar.wapgames.partiecommune.utilisateur.controleur.ValiderConnexionAction">
  7.                 <forward name="successJoueur" path="/jeu.do"/>
  8.                 <forward name="unsuccessJoueur" path="/partieCommune/wap/connexionJeu.jsp"/>
  9.         </action>


Le formulaire se situe dans la jsp connexionJeu, si la rentrée des informations est correcte, je me dirige vers jeu.do sinon, je reste sur connexionJeu.jsp où je suis censé afficher les messages d'erreurs.
 
Le formulaire est validé par ValiderConnexionActionForm, la redirection (forward) est assurée par ValiderConnexionAction. Les deux genèrent des messages d'erreurs (le validate de l'ActionForm renvoyant un ActionErrors et l'Action utilisant un saveErrors).
Je vous épargne le gros du code de ces deux classes mais voici les parties les plus importantes:

Code :
  1. public class ValiderConnexionAction extends Action {
  2.     // ...
  3.     private static final String UNSUCCESSJOUEUR = "unsuccessJoueur";
  4.    
  5.     public ActionForward execute(ActionMapping mapping, ActionForm form,
  6.             HttpServletRequest request, HttpServletResponse response)
  7.             throws Exception {
  8.         ValiderConnexionActionForm validerConnexionAdminActionForm =
  9.                 (ValiderConnexionActionForm) form;
  10.        
  11. System.out.println("Tentative de connexion d'un utilisateur" );
  12.        
  13.         String login = validerConnexionAdminActionForm.getLogin();
  14.         String password = validerConnexionAdminActionForm.getPassword();
  15.         String type = validerConnexionAdminActionForm.getType();
  16.        
  17.         // ...
  18.         } else {
  19.             ActionMessages errors = new ActionMessages();
  20.             ActionMessage error = new ActionMessage(
  21.                     "validerConnexion.errors.login.invalid" );
  22.             errors.add("connexionLoginWrong", error);
  23.             if (type.equals("joueur" )) {
  24.                 Statistique.log("Login", "JOUEUR_PASOK",
  25.                         "Tentative de connection de login [" + login + "]." );
  26.                 saveErrors(request, errors);
  27.                 return mapping.findForward(UNSUCCESSJOUEUR);
  28.         // ...
  29.         }
  30. }


 

Code :
  1. public class ValiderConnexionActionForm extends
  2.         org.apache.struts.action.ActionForm {
  3.    
  4.     /**
  5.      * login saisi.
  6.      */
  7.     private String login;
  8.    
  9.     /**
  10.      * mot de passe saisi.
  11.      */
  12.     private String password;
  13.    
  14.     /**
  15.      * si c'est une demande de connexion d'un joueur ou d'un administrateur.
  16.      */
  17.     private String type;
  18.    
  19.     /**
  20.      * @return login
  21.      */
  22.     public String getLogin() {
  23.         return login;
  24.     }
  25.    
  26.     /**
  27.      * @param string
  28.      *            login
  29.      */
  30.     public void setLogin(String string) {
  31.         login = string;
  32.     }
  33.    
  34.     /**
  35.      * @return mot de passe
  36.      */
  37.     public String getPassword() {
  38.         return password;
  39.     }
  40.    
  41.     /**
  42.      * @param string
  43.      *            mot de passe
  44.      */
  45.     public void setPassword(String string) {
  46.         password = string;
  47.     }
  48.    
  49.     /**
  50.      *
  51.      */
  52.     public ValiderConnexionActionForm() {
  53.         super();
  54.         // TODO Auto-generated constructor stub
  55.     }
  56.    
  57.     /**
  58.      * @param mapping
  59.      *            mapping d'entrée
  60.      * @param request
  61.      *            requete d'entrée
  62.      * @return les erreurs
  63.      */)
  64.     public ActionErrors validate(ActionMapping mapping,
  65.             HttpServletRequest request) {
  66.         ActionErrors errors = new ActionErrors();
  67.         if (getLogin() == null || getLogin().length() < 1) {
  68.             errors.add("connexionNameEmpty", new ActionMessage(
  69.                     "validerConnexion.error.name.required" ));
  70.            
  71.         }
  72.         if (getPassword() == null || getPassword().length() < 1) {
  73.             errors.add("connexionPasswordEmpty", new ActionMessage(
  74.                     "validerConnexion.error.password.required" ));
  75.            
  76.         }
  77.         return errors;
  78.     }
  79.    
  80.     /**
  81.      * @return Retourne le champs type.
  82.      */
  83.     public String getType() {
  84.         return type;
  85.     }
  86.    
  87.     /**
  88.      * @param type La valeur a mettre dans l'attribut type.
  89.      */
  90.     public void setType(String type) {
  91.         this.type = type;
  92.     }
  93. }


 
Dans les ActionMessage, j'assigne un nom de propriété (connexionNameEmpty e.g.) ainsi qu'un taglib définit dans le fichier de ressources pour chaque type d'erreur.
 
Pour terminer: un extrait de la JSP

Code :
  1. <wml:form action="login">
  2.             <logic:notPresent name="joueur">         
  3.                 <small>
  4.                     <p align="center">
  5.                         <small><b><bean:message key="cConnexionJeu.identification"/></b></small>
  6.                     </p>
  7.                     <html:errors property="connexionNameEmpty"/>
  8.                     <html:errors property="connexionPasswordEmpty"/>
  9.                     <html:errors property="connexionLoginBanni"/>
  10.                     <html:errors property="connexionLoginWrong"/>
  11.                     <html:errors property="connexionLoginDejaLogge"/>
  12.                     <table>
  13.                         <tr>
  14.                             <td width="150">
  15.                                 <bean:message key="cAcc.idf"/>&#32;
  16.                             </td><td>
  17.                                 <wml:text property="login"/><br/>
  18.                             </td>
  19.                         </tr><tr>
  20.                             <td>
  21.                                 <bean:message key="cAcc.pwd"/>&#32;
  22.                             </td><td>
  23.                                 <wml:password property="password"/><br/>
  24.                             </td>
  25.                         </tr>
  26.                     </table>
  27.                 </small>
  28.                 <small>
  29.                     <anchor>
  30.                         <u><bean:message key="cAcc.seLoguer"/></u>
  31.                         <wml:go action="login" method="post">
  32.                             <postfield name="login" value="$login" />
  33.                             <postfield name="password" value="$password"/>
  34.                             <postfield name="type" value="joueur"/>
  35.                         </wml:go>
  36.                     </anchor>
  37.                 </small>
  38.                 <small><br/>
  39.                     <bean:message key="page.separateur"/>
  40.                     <br/>
  41.                     <wml:link href="#cInscr"><bean:message key="cAcc.sInscrire"/></wml:link>
  42.                 </small>
  43.             </logic:notPresent>
  44.            
  45.             <logic:present name="joueur">
  46.                 <small>
  47.                     <anchor>
  48.                        <u> <bean:message key="general.jouer"/></u>
  49.                         <wml:go action="jeu" method="post"/>
  50.                     </anchor>
  51.                     <br/>
  52.                     <anchor>
  53.                         <u><bean:message key="general.deconnecter"/></u>
  54.                         <wml:go action="deconnecterJoueur" method="post"/>
  55.                     </anchor>
  56.                 </small>
  57.             </logic:present>         
  58.             <br/>
  59.         </wml:form>


 
J'utilise ici des html:errors sur chacune des propriétés, j'ai aussi essayé la balise <html:errors /> seule et <html:errors property="org.apache.struts.action.ERROR" /> (vu dans un des topics de ce forum), chacune de ces solutions a été testée dans et en dehors du formulaire.
 
Et donc je suis bloqué ici, dans l'incapacité de les afficher. :pt1cable:  
Si vous voyez d'où le problème provient, ça me serait d'une très grande aide, merci d'avance :D

Reply

Marsh Posté le 12-04-2007 à 10:32:01   

Reply

Sujets relatifs:

Leave a Replay

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