Bonjour, c'est encore moi et toujours avec du Struts 8)
Je développe une application pour le Wap, accessible par téléphone portable et navigateur le supporant (Opera/Firefox + plugin WmlBrowser)
Je suis en ce moment sur une messagerie, en gros envoi d'emails)
Je peux écrire un message (titre, destinataire(s), corps du message), l'envoyer, lire les messages reçus, répondre.
Mon problème surgit lorsque j'ai réalisé une action d'envoi puis que je veux consulter un message ou en écrire un autre: le formulaire d'écriture du message est déjà pré rempli mais avec les informations du premier envoi.
Par exemple, le premier mail écrit était composé de: Titre="test", Destinataire="test6", Corps="salut", j'envoie.
Peu après, je reçois une réponse de test6, je veux lui répondre, le formulaire apparait mais avec les données précédentes (donc "test", "test6" et "salut").
J'ai vérifié en long en large et en travers les logs de mon programme, affichant les parametres passés, les valeurs des champs, tout est correct mais le portable et le navigateur (même combat sur les deux !!!) m'affichent d'anciennes valeurs.
Voilà la JSP:
<%@ taglib uri="http://jakarta.apache.org/struts/tags-bean" prefix="bean" %> <%@ taglib uri="http://jakarta.apache.org/struts/tags-html" prefix="html" %> <%@ taglib uri="/WEB-INF/struts-wml.tld" prefix="wml" %> <%@ taglib uri="http://jakarta.apache.org/struts/tags-logic" prefix="logic" %> <%@page contentType="text/vnd.wap.wml"%> <%@page import="com.appli.util.Configuration"%> <% request.setAttribute("tpMaxCORPS", new java.lang.Integer(Configuration.MESS_TAILLEMAX_CORPS)); request.setAttribute("tpMaxTITRE", new java.lang.Integer(Configuration.MESS_TAILLEMAX_TITRE)); %> <%-- Contrôle de login --%> <%@include file="/partieCommune/wap/include/validerSession.jsp"%> <card id="cEcrMes" title="<bean:message key="cEcrMes.titre"/>"> <%@include file="/jeu/wap/include/dummy.jsp"%> <p align="left"> <small> <html:errors/> <br/> <%-- Affichage d'un message si c'est pour signaler un bug --%> <logic:present parameter="signalerbug"> <bean:message key="cEcrMess.bug"/> <br/><br/> </logic:present> </small> <%-- Le titre du message --%> <small> <b> <bean:message key="cEcrMes.titreMess"/> : </b> </small> <wml:text property="titre" value="${defautTitre}" maxlength="${tpMaxTITRE}"/> <br/> <%-- Le(s) destinataire(s) du message --%> <small> <b> <bean:message key="cEcrMes.dests"/> : </b> </small> <wml:text property="destinataire" value="${defautDest}" /> <br/> <%-- Ajout de destinataire --%> <small> <anchor> <bean:message key="cEcrMes.ajoutDestinataire"/> <wml:go action="majDefautDest" method="post"> <postfield name="forward" value="selectionJoueur"/> <postfield name="destinataire" value="$destinataire"/> <postfield name="titre" value="$titre"/> <postfield name="corps" value="$corps"/> <postfield name="action" value="ecrireMessage"/> <postfield name="selection" value="true"/> <postfield name="retourSelectionJoueurAction" value="ecrireMessageCard"/> <postfield name="dummy" value="<% out.println(request.getAttribute("dummy")); %>"/> </wml:go> </anchor> </small> <%-- Le corps du message --%> <br/> <small> <b> <bean:message key="cEcrMes.corps"/> : </b> </small> <wml:text property="corps" value="${defautCorps}" maxlength="${tpMaxCORPS}"/> <br/> </p> <%-- Lien envoyer le message --%> <p align="left"> <small> <wml:form action="envoyerMessage"> <anchor> <bean:message key="cEcrMes.envoyer"/> <wml:go action="envoyerMessage" method="post"> <postfield name="titre" value="$titre"/> <postfield name="destinataire" value="$destinataire"/> <postfield name="corps" value="$corps"/> <postfield name="dummy" value="<% out.println(request.getAttribute("dummy")); %>"/> </wml:go> </anchor> </wml:form> <%-- Liens de retour --%> <br/> <%@include file="/partieCommune/wap/include/barreSeparator.jsp"%> <br/> <anchor> <bean:message key="cLirMess.retourMess"/> <wml:go action="afficherMessagerie" method="post"> <postfield name="retour" value="1"/> <postfield name="dummy" value="<% out.println(request.getAttribute("dummy")); %>"/> </wml:go> </anchor> </small> </p> <jsp:include page="/partieCommune/wap/include/menuJeu.jsp" /> <jsp:include page="/partieCommune/wap/include/accueilGallery.jsp" /> </card>
Le struts-config.xml, traitant de cette partie
<action input="/partieCommune/wap/messagerie.jsp" path="/ecrireMessage" type="com.appli.wapgames.partiecommune.messagerie.controleur.EcrireMessageAction"> <forward name="success" path="/partieCommune/wap/messagerie.jsp"/> <forward name="successHtml" path="/partieCommune/html/ecrireMessage.jsp"/> </action>
Voilà le code de EcrireMessageAction.java
/* package com.appli.wapgames.partiecommune.messagerie.controleur; import com.appli.util.Configuration; import com.appli.util.StaticMethodes; import com.appli.wapgames.partiecommune.jeu.JeuEnregistre; import com.appli.wapgames.partiecommune.messagerie.Message; import com.appli.wapgames.partiecommune.utilisateur.Joueur; import java.util.Collection; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionMapping; import org.apache.struts.action.ActionForward; public class EcrireMessageAction extends Action { /** * cas où l'affichage de la page d'envoi a réussi. */ private static final String SUCCESS = "success"; /** * cas où l'affichage de la page d'envoi a réussi (HTML). */ private static final String SUCCESS_HTML = "successHtml"; /** * constante égale à 4. */ static final int QUATRE = 4; public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { String paramChoix = request.getParameter("choix"); int choix = 0; if (paramChoix != null) { choix = Integer.parseInt(paramChoix); } String defautDest = request.getParameter("defautDest"); if (defautDest == null) { defautDest = (String) request.getSession(). getAttribute("defautDest"); if (defautDest == null) { defautDest = ""; } } String defautTitre = request.getParameter("defautTitre"); if (defautTitre == null) { defautTitre = (String) request.getSession().getAttribute( "defautTitre"); if (defautTitre == null) { defautTitre = ""; } } Message m = (Message) request.getSession(). getAttribute("unMessage"); if (choix == 1) { //cas où l'on vient de répondre defautTitre = "Re:" + m.getTitre(); } else if (choix == 2) { //cas où l'on vient de répondre à tous Joueur j = (Joueur) request.getSession().getAttribute("joueur"); if (j == null) { return mapping.findForward(SUCCESS); } if (m != null) { defautDest = m.getRepondreTous(j.getPseudo()); defautTitre = "Re:" + m.getTitre(); } } // on regarde si l'utilisateur a ajouté un joueur aux destinataires String sIdJoueur = request.getParameter("idAutreJoueur"); if (sIdJoueur != null) { defautDest = (String) request.getSession(). getAttribute("defautDest"); if (defautDest == null) { defautDest = ""; } int idJ = Integer.parseInt(sIdJoueur); String destEnPlus = JeuEnregistre.getJeuEnregistre( Configuration.JEU_NOM_BASE) .getUtilisateurEnregistre(idJ).getPseudo(); //on test si le joueur fait deja parti des destinataires if (!StaticMethodes.stringContains(defautDest, destEnPlus)) { if (defautDest != "") { defautDest += ", "; } defautDest += destEnPlus; } } //on met à jour les 2 variables utiles pour le message request.getSession().setAttribute("defautDest", defautDest); request.getSession().setAttribute("defautTitre", defautTitre); if (choix != QUATRE) { //pour la permutation de l'ordre des jsp request.getSession().setAttribute("cardLireOuEcr", "1"); return mapping.findForward(SUCCESS); } else { Collection allJoueur = JeuEnregistre.getJeuEnregistre( Configuration.JEU_NOM_BASE). getUtilisateursEnregistre(); request.getSession().setAttribute("allJoueur", allJoueur); return mapping.findForward(SUCCESS_HTML); } } }
Si jamais quelqu'un avait une solution pour m'aider, ce serait vraiment sympa, merci !