[Struts]<html:errors />

Fermé
Rom1984 Messages postés 1 Date d'inscription mercredi 11 avril 2007 Statut Membre Dernière intervention 11 avril 2007 - 11 avril 2007 à 14:58
 benoit supinfo - 15 déc. 2008 à 17:00
Bonjour,
Je suis actuellement sur un projet consistant à compléter et améliorer un jeu accessible depuis le WAP.
Le projet avait débuté l'an dernier avec une autre équipe, et donc le reprendre est un peu chaud étant donné que je n'ai que très peu touché aux technologies utilisées et donc la moindre erreur/bug venant de tests ou d'erreurs de l'ancienne équipe est un vrai casse-tête !
Cette application utilise le framework struts et genère donc des pages WML.

Mon souci provient de la balise <html:errors /> et des traitements qui se situent derrière celle-ci. En effet, j'arrive sur une page avec un formulaire. Je rentre des informations fausses et je valide. Le problème est que les messages d'erreurs ne sont pas affichés (pire, ils provoquent des messages d'erreurs sur les postes du réseau voulant aller sur cette page).

Voilà un extrait de struts-config.xml (définissant l'action form et l'action pour le formulaire de la page concernée):
        <form-bean name="ValiderConnexionActionForm" type="com.opensugar.wapgames.partiecommune.utilisateur.controleur.ValiderConnexionActionForm"/>

...

        <action input="/partieCommune/wap/connexionJeu.jsp" name="ValiderConnexionActionForm" path="/login" scope="session" type="com.boite.wapgames.partiecommune.utilisateur.controleur.ValiderConnexionAction">
            <forward name="successJoueur" path="/jeu.do"/>
            <forward name="unsuccessJoueur" path="/partieCommune/wap/connexionJeu.jsp"/>
            <forward name="successAdmin" path="/partieCommune/html/index.jsp"/>
            <forward name="unsuccessAdmin" path="/partieCommune/html/index.jsp"/>
        </action>


Dans connexionJeu.jsp (la page contenant le formulaire):
<wml:form action="login">
            <logic:notPresent name="joueur">				      
                <small>
                    <html:errors property="connexionNameEmpty"/>
                    <html:errors property="connexionPasswordEmpty"/>
                    <html:errors property="connexionLoginBanni"/>
                    <html:errors property="connexionLoginWrong"/>
                    <html:errors property="connexionLoginDejaLogge"/>
...


Méthode validate de l'ActionForm:
public ActionErrors validate(ActionMapping mapping,
            HttpServletRequest request) {
System.out.println("Tentative de connexion d'un utilisateur dans le form");
        ActionErrors errors = new ActionErrors();
        if (getLogin() == null || getLogin().length() < 1) {
            errors.add("connexionNameEmpty", new ActionMessage(
                    "validerConnexion.error.name.required"));
            
        }
        if (getPassword() == null || getPassword().length() < 1) {
            errors.add("connexionPasswordEmpty", new ActionMessage(
                    "validerConnexion.error.password.required"));
            
        }
        return errors;
    }


Méthode execute de l'Action:
public ActionForward execute(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {
        ValiderConnexionActionForm validerConnexionAdminActionForm =
                (ValiderConnexionActionForm) form;
        
        String login = validerConnexionAdminActionForm.getLogin();
        String password = validerConnexionAdminActionForm.getPassword();
        String type = validerConnexionAdminActionForm.getType();
        
        WapGame jeuEnregistre = WapGame.getWapGame(
                Configuration.JEU_NOM_BASE);
        UtilisateurEnregistre utilisateurEnregistre = null;
        try {
            utilisateurEnregistre = jeuEnregistre.seConnecter(login, password);
        } catch (JoueurBanniException ex) {
            ActionMessages errors = new ActionMessages();
            ActionMessage error = new ActionMessage(
                    "validerConnexion.errors.banni", ex.getMessage());
            errors.add("connexionLoginBanni", error);
            saveErrors(request.getSession(), errors);
            Statistique.log("Login", "JOUEUR_BANNI",
                    "Tentative de connection de login [" + login + "].");
            return mapping.getInputForward();
        } catch (JoueurDejaLoggeException ex) {
            ActionMessages errors = new ActionMessages();
            ActionMessage error = new ActionMessage(
                    "validerConnexion.errors.dejaLogge", ex.getMessage());
            errors.add("connexionLoginDejaLogge", error);
            saveErrors(request.getSession(), errors);
            Statistique.log("Login", "JOUEUR_DEJALOGGE",
                    "Tentative de connection de login [" + login + "].");
            return mapping.getInputForward();
        }
        
        if (utilisateurEnregistre != null) {
            // si c'est un utilisateur enregistré il faut
            // verifier ensuite si c'est un joueur ou un admin
            if (utilisateurEnregistre.isJoueur()) {
                ((Joueur) utilisateurEnregistre).setSessionId(
                        request.getSession().getId());
                Langue langue = utilisateurEnregistre.getLangueChoisie();
                request.getSession().setAttribute("joueur",
                        utilisateurEnregistre);
                request.getSession().setAttribute("dossierCourant",
                        Configuration.NOM_BOITE_RECEPTION);
                request.getSession().setAttribute("langue", langue);
                if (langue != null) {
                    setLocale(request, new Locale(langue.getAcronyme()));
                }
                Statistique.log("Login", "JOUEUR_OK",
                        "Tentative de connection de login [" + login + "].");
                return mapping.findForward(SUCCESSJOUEUR);
                
            } else if (utilisateurEnregistre.isAdministrateur()) {
                request.getSession().setAttribute(Configuration.LOGIN_ADMIN,
                        utilisateurEnregistre);
                
                return mapping.findForward(SUCCESSADMIN);
            } else {
                ActionMessages errors = new ActionMessages();
                ActionMessage error = new ActionMessage(
                        "validerConnexion.errors.login.invalid");
                errors.add("connexionLoginWrong", error);
                saveErrors(request.getSession(), errors);
                return mapping.findForward(UNSUCCESSADMIN);
            }
            
        } else {
            ActionMessages errors = new ActionMessages();
            ActionMessage error = new ActionMessage(
                    "validerConnexion.errors.login.invalid");
            errors.add("connexionLoginWrong", error);
            saveErrors(request.getSession(), errors);
            if (type.equals("joueur")) {
                Statistique.log("Login", "JOUEUR_PASOK",
                        "Tentative de connection de login [" + login + "].");
                return mapping.findForward(UNSUCCESSJOUEUR);
            } else if (type.equals(Configuration.LOGIN_ADMIN)) {
                return mapping.findForward(UNSUCCESSADMIN);
            } else {
                return mapping.getInputForward();
            }
        }
    }

Tous les tags utilisés pour gérer les erreurs sont définis dans l'ApplicationRessouce.properties

J'ai aussi tenté avec un simple <html:errors /> à la place des cinq lignes d'erreurs dans la jsp situé en dehors du formulaire mais rien n'y fait ...!!!

Si vous voyez d'où ça pourrait venir, ce serait vraiment sympa ^^

Merci d'avance pour votre aide
A voir également:

1 réponse

benoit supinfo
15 déc. 2008 à 17:00
je pense qu'il te manque la balise input dans ton struts-config.xml
0