Bonjour,
Je développe un jeu accessible depuis le wap (wml donc) en utilisant struts.
1 - Le joueur doit se connecter au jeu via un formulaire (wml:form), il rentre son login et son mot de passe. Le tout est géré par une Action ValiderInscriptionAction et l'actionForm ValiderInscriptionActionForm. Le formulaire se trouve dans la JSP connexionJeu
Voilà un extrait de struts-config.xml:
Mon but est d'afficher les messages d'erreurs provoqués par de mauvaises données rentrées, chose qui ne s'effectue pas. Autre chose, je ne m'occupe que des forward successJoueur et unsuccessJoueur !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 <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.opensugar.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:
Méthode validate de l'ActionForm:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 <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 execute de l'Action:
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 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) { System.out.println("Dans validerconnexionactionform => name required"); errors.add("connexionNameEmpty", new ActionMessage( "validerConnexion.error.name.required")); } if (getPassword() == null || getPassword().length() < 1) { System.out.println("Dans validerconnexionactionform => password required"); errors.add("connexionPasswordEmpty", new ActionMessage( "validerConnexion.error.password.required")); } return errors; }
Tous les tags utilisés pour gérer les erreurs sont définis dans l'ApplicationRessouce.properties
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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86 public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { ValiderConnexionActionForm validerConnexionAdminActionForm = (ValiderConnexionActionForm) form; System.out.println("Tentative de connexion d'un utilisateur"); 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(); } } }
Si vous voyez d'où ça pourrait venir, ce serait vraiment sympa ^^
2 - Mon second problème est un problème d'encodage de caractères.
J'ai lu un peu partout (dont la FAQ Struts), d'utiliser la propriété filter dans un bean:write. Mon problème est que j'utilise un bean:message (à partir d'un tag donc) pour afficher un '<'
Dans ApplicationProperties.ressource, j'ai défini un tag chevron.inferieur.
J'ai essayé de mettre comme valeur de ce tag < et < mais dans le premier cas, j'ai une erreur (genre balise ouvrante mais aucune fermante) et le second conserve le code dans la page
Voilà donc comment faire pour afficher un chevron dans un bean:message
Merci d'avance pour votre aide
Partager