IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Struts 1 Java Discussion :

Internationalisation: Bean, validation et affichage d'un message d'erreur


Sujet :

Struts 1 Java

  1. #1
    Membre habitué
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    167
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 167
    Points : 143
    Points
    143
    Par défaut Internationalisation: Bean, validation et affichage d'un message d'erreur
    Bonjour à tous,

    Nous importons des données à partir de fichiers CSV, données que nous validons aussitôt. Quand les données ne respectent pas les spécifications (donnée requise, valeur entière...), nous souhaiterions afficher un message (international) d'erreur par donnée.

    Concernant la validation de chaque bean, nous avons implémenté une method validate semblable à celle de la validation struts d'un formulaire. Le bean contient d'ailleurs un attribut ActionMessage que l'on tente d'afficher dans la JSP.

    Mes questions sont :
    - Avez vous déjà rencontrer ce genre de souci ? Si oui, comment vous en êtes vous sorti ?
    - Le détournement de l'utilisation ActionMessage est elle judicieuse pour ce cas de figure ? Si non, comment feriez-vous? Si oui, quelques conseils pour afficher les messages?

    Merci d'avance pour vos réponses

    Jean

  2. #2
    Expert éminent

    Femme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Points : 7 778
    Points
    7 778
    Par défaut
    As-tu fait comme indiqué dans la FAQ pour créer des ActionMessage et les afficher dans la jsp ?

  3. #3
    Membre habitué
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    167
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 167
    Points : 143
    Points
    143
    Par défaut
    Désolé pour le delai de cette réponse. En solution à mon problème initiale, j'ai bidouillé mon propre affichage de msg.

    Toutefois je fais de nouveau face à un problème similaire. Dans mon code, je valide qu'une donnée (non cle primaire) n'existe pas encore dans une table.

    Qd c'est le cas, je dois afficher un message "international" basé sur deux éléments de mes fichiers de propriétés.

    Pour cela, j'ai codé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ActionMessage value = new ActionMessage("name");
    ActionMessage msg = new ActionMessage("errors.nonunique",value);
    errors.add(ActionMessages.GLOBAL_MESSAGE, msg);
    mais cela ne fonctionne pas comme je voudrais... le message suivant s'affiche:
    Erreur lors de la tentative d'enregistrement.
    Merci de corriger le(s) élélemt(s) suivant:
    name[] n'est pas unique.
    Merci d'avance

  4. #4
    Membre habitué
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    167
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 167
    Points : 143
    Points
    143
    Par défaut
    Citation Envoyé par jdvacheron Voir le message
    Désolé pour le delai de cette réponse. En solution à mon problème initiale, j'ai bidouillé mon propre affichage de msg.
    Pour info, ma solution constiste à utiliser une liste de beans contenant une key et une valeur... C'est pas tres jojo, n'est ce pas...

    dans ma JSP, je visualise le contenu avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <c:if test="${ !entry.valid }">
      <c:forEach var="msg" items="${ entry.fmtMessages }">
        <nobr> <fmt:message key="${ msg.key }" bundle="${loc}">
        <c:if test="${msg.args != null}">
          <c:forEach var="arg" items="${ msg.args }">
            <fmt:param><fmt:message key="${ arg }" bundle="${loc}"></fmt:message></fmt:param>
          </c:forEach>
        </c:if>
        </fmt:message></nobr>
      </c:forEach>
    </c:if>

  5. #5
    Membre habitué
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    167
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 167
    Points : 143
    Points
    143
    Par défaut
    Citation Envoyé par jdvacheron Voir le message
    Pour cela, j'ai codé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ActionMessage value = new ActionMessage("name");
    ActionMessage msg = new ActionMessage("errors.nonunique",value);
    errors.add(ActionMessages.GLOBAL_MESSAGE, msg);
    En fait, je ne sais pas comment ajouter un "paramètre" (ou argument?) dans un message. Quelqu'un a t'il une idée?

  6. #6
    Membre averti

    Profil pro
    Inscrit en
    Mars 2007
    Messages
    392
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 392
    Points : 439
    Points
    439
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <fmt:param><fmt:message key="${ arg }" bundle="${loc}"></fmt:message></fmt:param>
    en fait c'est l'inverse :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <fmt:message key="${ arg }" bundle="${loc}"><fmt:param value="bonjour"></fmt:param></fmt:message>
    si dans ton fichier resources.properties tu as pour la clé ${arg} :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "${arg}"={0}, comment vas-tu?
    ça va afficher :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    bonjour, comment vas-tu?
    pour ce qui est de la construction des messages, tu peux aller ici, il y a un exemple de construction d'un message avec plusieurs paramètres : le constructeur que tu utilises n'est pas correct.

  7. #7
    Membre habitué
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    167
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 167
    Points : 143
    Points
    143
    Par défaut
    Salut,

    je comprends bien ta réponse.

    le hic dans mon cas de figure, c'est la valeur de mon param vient elle aussi de mon fichier de proriété.

    En fait mon message se décompose en un corps et une valeur qui dépendent toute les deux des locales. Par ex:

    fichier de prop anglais :
    errors.required:{0} is required.
    rule:rule

    fichier de prop fr :
    errors.required:{0} est requis(e).
    rule:la règle

    Et je voudrais afficher les valeurs pour errors.required et rule, par exemple: rule is required.

  8. #8
    Membre averti

    Profil pro
    Inscrit en
    Mars 2007
    Messages
    392
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 392
    Points : 439
    Points
    439
    Par défaut
    je pense que la construction de tes messages n'est pas bonne.
    tu as écris :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ActionMessage value = new ActionMessage("name");
    ActionMessage msg = new ActionMessage("errors.nonunique",value);
    errors.add(ActionMessages.GLOBAL_MESSAGE, msg);
    et, j'écrirai plutôt ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    java.util.ResourceBundle rb = ResourceBundle.getBundle("chemin du fichier properties des messages");
    ActionMessage msg = new ActionMessage("errors.nonunique",rb.getString("name"));
    errors.add(ActionMessages.GLOBAL_MESSAGE, msg);
    ainsi si tu as le fichier de ressources comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    _fr.properties
    errors.unique={0} doit être unique
    name=Le nom
    _en.properties
    errors.unique={0} must be unique
    name=The name
    dans la jsp, tu n'as pas besoin de faire les boucles....
    note : le chemin du fichier de ressources doit être un chemin dans le classpath ("fr.toto.titi.ApplicationsRessources") et peut être mis dans une constante pour factoriser le code.

  9. #9
    Expert éminent

    Femme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 793
    Points : 7 778
    Points
    7 778
    Par défaut
    Pour récupérer le libellé de la clé rule dans l'Action, tu peux faire aussi comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    MessageResources messagesResources = this.getResources(request) ;
    ActionMessage msg = new ActionMessage("errors.required",messagesResources.getMessage("rule"));

  10. #10
    Membre habitué
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    167
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 167
    Points : 143
    Points
    143
    Par défaut
    Encore une fois, quel talent cette c_nvy... trop la classe

    Merci mille fois

  11. #11
    Membre habitué
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    167
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 167
    Points : 143
    Points
    143
    Par défaut
    Je me suis un peu emflammer... Je n'avais pas encore changer tout mon code.

    cha marche plus...

    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
    GRAVE: "Servlet.service()" pour la servlet jsp a lancé une exception
    javax.servlet.jsp.JspException: Missing message for key "errors.notfound[alertrule]"
    	at org.apache.struts.taglib.bean.MessageTag.doStartTag(MessageTag.java:233)
    	at org.apache.jsp.jsp.alertRule.alertRulesUploadBox_jsp._jspx_meth_bean_005fmessage_005f21(alertRulesUploadBox_jsp.java:1621)
    	at org.apache.jsp.jsp.alertRule.alertRulesUploadBox_jsp._jspx_meth_c_005fforEach_005f1(alertRulesUploadBox_jsp.java:1588)
    	at org.apache.jsp.jsp.alertRule.alertRulesUploadBox_jsp._jspx_meth_c_005fif_005f5(alertRulesUploadBox_jsp.java:1551)
    	at org.apache.jsp.jsp.alertRule.alertRulesUploadBox_jsp._jspx_meth_c_005fforEach_005f0(alertRulesUploadBox_jsp.java:1071)
    	at org.apache.jsp.jsp.alertRule.alertRulesUploadBox_jsp._jspx_meth_logic_005fnotEmpty_005f0(alertRulesUploadBox_jsp.java:657)
    	at org.apache.jsp.jsp.alertRule.alertRulesUploadBox_jsp._jspx_meth_html_005fform_005f0(alertRulesUploadBox_jsp.java:242)
    	at org.apache.jsp.jsp.alertRule.alertRulesUploadBox_jsp._jspService(alertRulesUploadBox_jsp.java:124)
    	at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    	at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:393)
    	at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
    	at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    	at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:654)
    	at org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:557)
    	at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:481)
    	at org.apache.jasper.runtime.JspRuntimeLibrary.include(JspRuntimeLibrary.java:968)
    	at org.apache.jasper.runtime.PageContextImpl.include(PageContextImpl.java:609)
    	at org.apache.struts.tiles.TilesUtilImpl.doInclude(TilesUtilImpl.java:99)
    	at org.apache.struts.tiles.TilesUtil.doInclude(TilesUtil.java:135)
    	at org.apache.struts.taglib.tiles.InsertTag.doInclude(InsertTag.java:760)
    	at org.apache.struts.taglib.tiles.InsertTag$InsertHandler.doEndTag(InsertTag.java:892)
    	at org.apache.struts.taglib.tiles.InsertTag.doEndTag(InsertTag.java:462)
    	at org.apache.jsp.jsp.template.templateOneMain_jsp._jspx_meth_tiles_005fget_005f4(templateOneMain_jsp.java:208)
    	at org.apache.jsp.jsp.template.templateOneMain_jsp._jspService(templateOneMain_jsp.java:98)
    	at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    	at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:393)
    	at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
    	at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    	at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:654)
    	at org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:557)
    	at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:481)
    	at org.apache.jasper.runtime.JspRuntimeLibrary.include(JspRuntimeLibrary.java:968)
    	at org.apache.jasper.runtime.PageContextImpl.include(PageContextImpl.java:609)
    	at org.apache.struts.tiles.TilesUtilImpl.doInclude(TilesUtilImpl.java:99)
    	at org.apache.struts.tiles.TilesUtil.doInclude(TilesUtil.java:135)
    	at org.apache.struts.taglib.tiles.InsertTag.doInclude(InsertTag.java:760)
    	at org.apache.struts.taglib.tiles.InsertTag$InsertHandler.doEndTag(InsertTag.java:892)
    	at org.apache.struts.taglib.tiles.InsertTag.doEndTag(InsertTag.java:462)
    	at org.apache.jsp.jsp.alertRule.alertRulesUpload_jsp._jspx_meth_tiles_005finsert_005f0(alertRulesUpload_jsp.java:121)
    	at org.apache.jsp.jsp.alertRule.alertRulesUpload_jsp._jspService(alertRulesUpload_jsp.java:62)
    	at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    	at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:393)
    	at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
    	at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    	at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:654)
    	at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:445)
    	at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:379)
    	at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:292)
    	at org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:1085)
    	at org.apache.struts.action.RequestProcessor.processForwardConfig(RequestProcessor.java:398)
    	at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:241)
    	at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
    	at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
    	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
    	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
    	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:263)
    	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
    	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:584)
    	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
    	at java.lang.Thread.run(Thread.java:619)
    quelqu'un aurait il une idée svp?



    code JSP :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    <c:forEach var="entry" items="${ alertRulesUploadForm.alertRules }" varStatus="rowStatus">
    ...
    <c:forEach items="${entry.messages}" var="cur">
      <bean:message key="${ cur }" />
    </c:forEach>
    ...
    </c:forEach>

    fichier de propriétés:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    ....
    errors.notfound= {0} non trouvé(e).
    ...
    alertrule=alert rule
    ....

  12. #12
    Membre averti

    Profil pro
    Inscrit en
    Mars 2007
    Messages
    392
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 392
    Points : 439
    Points
    439
    Par défaut
    bonjour,
    comment popules-tu le bean alertRulesUploadForm.alertRules ?

  13. #13
    Membre habitué
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    167
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 167
    Points : 143
    Points
    143
    Par défaut
    tout montrer serait un peu trop long, alors je vais résumer.

    etape 1 : chargement des données depuis un fichier CSV et première vérification. Chaque ligne chargée est vérifiée, si une erreurs est levée, un message est ajouté pour être affiché pour la ligne. En cas d'une quelconque erreur, l'utilisateur ne peux pas passer à l'etape 2.

    etape 2 : validation des données elle même. nous validons les clés étrangères. Idem en cas d'erreur. Pas d'erreur, l'utilisateur pourra sauver...

    Mes messages sont ajoutés avec le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    for (AlertRuleCSV cur : alertRulesUpload) {
       ...
       String value = "modeltype";
       ActionMessage msg = new ActionMessage(FMTMessage.NOT_FOUND, messagesResources.getMessage(value));
       cur.getMessages.add(msg)
     
       ...
    }

  14. #14
    Membre habitué
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    167
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 167
    Points : 143
    Points
    143
    Par défaut
    remarque : avec bean:write, j'obtiens
    errors.notfound[model type]

  15. #15
    Membre averti

    Profil pro
    Inscrit en
    Mars 2007
    Messages
    392
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 392
    Points : 439
    Points
    439
    Par défaut
    en fait, tu utilises "mal" l'objet ActionMessage et son utilisation avec les taglibs de Struts.
    tu peux jeter un oeil FAQ Messages et javadoc html:messages

    en faisant ce qui suit, j'arrive à faire ce que tu veux :
    dans ton Action :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    ActionMessages msgs = new ActionMessages();
    ActionMessage msg = new ActionMessage("errors.byte", this.getResources(request).getMessage("oui"));
    msgs.add("", msg);
    msg = new ActionMessage("errors.byte", this.getResources(request).getMessage("non"));
    msgs.add("", msg);
    msg = new ActionMessage("errors.creditcard", this.getResources(request).getMessage("non"));
    msgs.add("", msg);
    msg = new ActionMessage("errors.creditcard", this.getResources(request).getMessage("oui"));
    msgs.add("", msg);
    request.setAttribute("message", msgs);
    monForm.setMessages(msgs);// je n'ai pas testé cette solution, mais ça devrait fonctionner. Mais as-tu besoin de stocker cette info dans le bean? la request ne suffit-elle pas?
    dans la jsp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <html:messages id="msg" name="message">
    <bean:write name="msg"/>
    </html:messages>
    et hop ;-) ça fonctionne.

  16. #16
    Membre averti

    Profil pro
    Inscrit en
    Mars 2007
    Messages
    392
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 392
    Points : 439
    Points
    439
    Par défaut
    je complète par rapport au post précédent : si le bean ActionMessages est un attribut du formulaire, c'est un peu plus compliqué... mais j'ai trouvé une solution :
    ton formulaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public MonForm extends ActionForm {
    private ActionMessages messages;
    get/set
    }
    ton action :
    la jsp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <bean:define id="msgs" name="MonForm" property="messages"/>
    <html:messages id="msg" name="msgs">
    <bean:write name="msg"/>
    </html:messages>

  17. #17
    Membre habitué
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    167
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 167
    Points : 143
    Points
    143
    Par défaut
    Avant toute chose, merci pour tes réponses.

    Cool ton dernier post... on tient le bon bout, je vais essayé de tester. j'ai fait un rolback pour ma solution initiale...

    Sinon, je sais que je n'utilise pas de facon conventionnelle les ActionMessages, c'était d'ailleurs ma question initiale.

    - Le détournement de l'utilisation ActionMessage est elle judicieuse pour ce cas de figure ? Si non, comment feriez-vous? Si oui, quelques conseils pour afficher les messages?

  18. #18
    Membre habitué
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    167
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 167
    Points : 143
    Points
    143
    Par défaut
    Avec le recul, ce qui m'intéresse c'est l'internationalisation de mes messages (avec utilisation de variable). Je suis parti du fonctionnement des ActionMessages mais après coup, je me rend bien compte que ce n'est pas la bonne facon d'implementer...

    Auriez-vous une bonne pratique à ce sujet ?

  19. #19
    Membre averti

    Profil pro
    Inscrit en
    Mars 2007
    Messages
    392
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 392
    Points : 439
    Points
    439
    Par défaut
    en fait, ce n'est pas que tu n'utilises pas de façon conventionnelle les ActionMessages.. il s'agissait de bien les utiliser.
    soit tu implémentes ton propre mécanisme de gestion des messages i18n en utilisant des List et des MessageFormat, soit tu utilises ce qui existe... mais encore faut-il l'utiliser correctement
    Ca dépend aussi de ton niveau de programmation java, ...
    Et ça dépend aussi du rendu 'HTML' que tu veux avoir... car avec la balise html:messages, tu peux être vite limité dans l'IHM finale...

    Pour ma part, si j'ai du temps, j'opterai pour développer un framework de gestion i18n de messages indépendant de struts => pour pouvoir l'utiliser dans un monde JSP/Servlet.
    Mais utiliser ActionMessages ne me choque pas du tout... il faut aussi savoir utiliser ce qui a été développé... et sûrement, et surtout, ce qui a été bien développé.

    [MODIFICATION]j'ai écrit mon post alors que tu postais le tien[/MODIFICATION]

  20. #20
    Nouveau membre du Club
    Profil pro
    Développeur Java
    Inscrit en
    Janvier 2008
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Janvier 2008
    Messages : 42
    Points : 34
    Points
    34
    Par défaut
    Bonjour jdvacheron,

    Je ne sais pas si tu peux utiliser les beans de struts. Si c'est le cas je te propose de mettre le code suivant afin d'avoir les messages d'erreurs en i18n:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <bean:message key="pages.login.successfuly" />
    Sans oublié biensur d'ajouter au début de page JSP

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     <html:html locale="true">

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Affichage d'un message d'erreur en cas de validation non reussi
    Par javalhoussain dans le forum ASP.NET
    Réponses: 4
    Dernier message: 11/04/2011, 16h59
  2. [MySQL] Affichage d'un message d'erreur au lieu du contenu de ma base
    Par kanebody dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 25/12/2009, 19h57
  3. Réponses: 2
    Dernier message: 23/06/2008, 17h12
  4. Réponses: 4
    Dernier message: 26/02/2008, 14h12
  5. Supprimer l'affichage d'un message d'erreur
    Par delphineleclerc1 dans le forum Access
    Réponses: 2
    Dernier message: 23/02/2006, 09h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo