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 :

[Struts]<bean:write>


Sujet :

Struts 1 Java

  1. #1
    Membre régulier
    Inscrit en
    Octobre 2003
    Messages
    93
    Détails du profil
    Informations forums :
    Inscription : Octobre 2003
    Messages : 93
    Points : 86
    Points
    86
    Par défaut [Struts]<bean:write>
    Bonjour,

    A nouveau problème, nouveau topic

    Alors voilà, j'utilise le tag bean:write de Struts pour formater les attributs que je souhaite afficher mais cela ne fonctionne plus lorsque j'utilise l'attribut formatKey.

    remarque => nombre est de type int.

    Ma première page :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <bean:write name="Test04_01_Form" format="#,##0.00" property="nombre" />
    fonctionne correctement et le nombre affiché est le suivant : 123 456 789,00

    Ma seconde page :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    <bean:write name="Test04_01_Form" property="date" formatKey="ressources01.formatDate" bundle="res01" />
    <bean:write name="Test04_01_Form" property="nombre" formatKey="ressources01.formatMontant" bundle="res01" />
    Mon fichier .properties associé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ressources01.formatDate = yyyy.MMMMM.dd GGG hh:mm aaa
    ressources01.formatMontant = ##0.00
    Et lorsque je souhaite afficher cette page j'ai une erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    org.apache.jasper.JasperException: Wrong format string: '#,##0.00'
    C'est à n'y rien comprendre surtout que lorsque je met en commentaire le bean:write du nombre, alors la date s'affiche correctement avec le pattern spécifé dans le fichier ".properties".

    Si vous avez une idée, ...

    Merci d'avance pour votre aide.

  2. #2
    Membre expérimenté
    Avatar de RanDomX
    Profil pro
    sans
    Inscrit en
    Mars 2003
    Messages
    579
    Détails du profil
    Informations personnelles :
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Mars 2003
    Messages : 579
    Points : 1 366
    Points
    1 366
    Par défaut
    pe un pb d'encoding notament pour les #.

    Essais un pattern plus simple et rajoute ptt à ptt les # et la ,.

    Franchement je n'ai jamais eu ce pb.

  3. #3
    Membre régulier
    Inscrit en
    Octobre 2003
    Messages
    93
    Détails du profil
    Informations forums :
    Inscription : Octobre 2003
    Messages : 93
    Points : 86
    Points
    86
    Par défaut
    J'ai pensé à ça moi aussi, alors j'ai remplacé les # par le caractère unicode /u0023 => le pattern devient : \u0023\u002C\u0023\u00230.00
    Résultat : la même erreur qu'avec #,##0.00

    Si par exemple je met un pattern à 0.00 le résultat est le suivant :
    12345678.

    Alors que j'attendrais plutôt : 12345678,00

    J'ai vraiment du mal à comprendre ce comportement et à savoir ce que je fais de travers...

    Ai je oublié de déclarer quelque chose dans ma JSP, dans mon struts-config.xml ? Est ce que le format int pour nombre est correct ?

  4. #4
    Membre expérimenté
    Avatar de RanDomX
    Profil pro
    sans
    Inscrit en
    Mars 2003
    Messages
    579
    Détails du profil
    Informations personnelles :
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Mars 2003
    Messages : 579
    Points : 1 366
    Points
    1 366
    Par défaut
    tu as laissé tes definitions avec {0, integer....} ???

    Si oui, je pense que c ca qui merde a cause du Simple formatter qui est utilisé et qui prends une String en entrée.

    @+

  5. #5
    Membre régulier
    Inscrit en
    Octobre 2003
    Messages
    93
    Détails du profil
    Informations forums :
    Inscription : Octobre 2003
    Messages : 93
    Points : 86
    Points
    86
    Par défaut
    Non ça c du passé, ça n'y est plus !

    J'ai juste :

    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
    <%@ page language="java" %>
    <%@ taglib uri="/Web Content/WEB-INF/struts-nested.tld" prefix="nested"%>
    <%@ taglib uri="/Web Content/WEB-INF/struts-logic.tld" prefix="logic"%>
    <%@ taglib uri="/Web Content/WEB-INF/struts-html.tld" prefix="html"%>
    <%@ taglib uri="/Web Content/WEB-INF/struts-bean.tld" prefix="bean"%>
     
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">
    <head>
     
    <title>Gérer une commande</title>
    <meta http-equiv="Content-Type" content="text/HTML; charset=utf-8"/>
     
    </head>
    <body>
    <h2>TEST I18N ET STRUTS</h2><br>
     
    <html:form action="/test04/test04_01.do" >
    Nombre formaté : <bean:write name="Test04_01_Form" property="nombre" formatKey="ressources01.formatMontant" bundle="res01" /> <br>
    Date formatée : <bean:write name="Test04_01_Form" property="date" formatKey="ressources01.formatDate" bundle="res01" /> 
     
    <br><br>
     
    </html:form>
     
    </body>
    </html>

  6. #6
    Membre régulier
    Inscrit en
    Octobre 2003
    Messages
    93
    Détails du profil
    Informations forums :
    Inscription : Octobre 2003
    Messages : 93
    Points : 86
    Points
    86
    Par défaut
    Bon,

    Depuis deux jours que je trime je viens enfin de trouver une piste mais le comportement que j'en déduis est vraiment très très très très très étrange

    Lorsque j'utilise formatKey et le pattern #,##0.00
    * avec une locale english => alors le nombre est affiché correctement : 123,456,789.00
    * avec une locale french => alors j'ai le message d'erreur évoqué dans les posts précédents comme quoi le pattern n'est pas correct

    J'ai donc décidé de modifier le pattern à : #0,00 et
    * avec une locale english => le nombre affiché est 12,34,56,78
    * avec une locale french => le nombre affiché est 123456789,00

    J'ai donc l'impression que le pattern (et notamment les séparateurs ',' et '.') dépend de la locale de l'utilisateur !!!! Or ça n'est pas ce qui est spécifié par Sun : http://java.sun.com/docs/books/tutorial/i18n/format/numberpattern.html

    Le plus étrange c'est que lorsque le format est directement spécifié dans l'attribut format du bean:write alors il n'y pas de problèmes et le pattern #,##0.00 est interprété correctement dans toutes les locales. La différence de comportement intervient donc au niveau du formatKey et des fichiers ".properties"

    Personellement, je trouve ce comportement vraiment étrange, et j'ai du mal à comprendre ce choix !

    Si vous savez pourquoi ce choix a été fait par Struts ? Quel en est son intéret (j'avoue que je saisi pas bien ) ? Ou je peux trouver une liste de séparateur de milliers et decimaux pour les différentes locales ?

    Merci d'avance pour votre aide.

    PS: Il semblerait que ce soit Struts qui lorsqu'on utilise les formatKey utilise la méthode 'applyLocalizedPattern' (=> pattern localisé) alors que lorsqu'on utilise l'attribut format il utilise 'apply'Pattern' ...

  7. #7
    Membre régulier
    Inscrit en
    Octobre 2003
    Messages
    93
    Détails du profil
    Informations forums :
    Inscription : Octobre 2003
    Messages : 93
    Points : 86
    Points
    86
    Par défaut
    D'après les infos que j'ai pu avoir sur la mailing-list de Struts, il semblerait que mes suppositions se confirment. C'est à dire, que la méthode applyLocalizedPattern() est utilisé pour les pattern issus de BundleResources, contre la méthode applyPattern() pour les patterns directement spécifiés via l'attribut format.

    D'ailleurs si on regarde dans les sources de Struts on voit bien cette distinction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
                    if( formatString!=null ) {
                            try {
                                    format = NumberFormat.getNumberInstance( locale );
                                    if( formatStrFromResources ) 
                                            ( ( DecimalFormat ) format ).applyLocalizedPattern( formatString );
                                    else
                                            ( ( DecimalFormat ) format ).applyPattern( formatString );                                        
                            } catch( IllegalArgumentException _e ) {
                                    JspException e = new JspException(messages.getMessage("write.format", formatString));
                                    RequestUtils.saveException(pageContext, e);
                                    throw e;
                            }
                    }
    Reste plus qu'a modifier le tag et recompiler ou alors se satisfaire des patterns localisés et faire attention lorsque quelqu'un tente d'accéder à l'application avec une locale inconnu qu'il ne tombe pas sur une exception 'pattern non valide' (ex: si par défaut on mis "#,##0.00" et qu'on accède à l'appli avec une locale french) !!!

    Les différents interlocuteurs que j'ai eu n'ont pas été capables de m'expliquer les raisons de ce choix, au contraire, je pense que ce serait bien plus simple si le format de pattern était universel, et si le tag faisait plutôt appel à la méthode applyPattern()... menfin j'ai pas trop le choix ...

    Merci à toi RanDomX pour ton aide en tout cas

  8. #8
    Membre expérimenté
    Avatar de RanDomX
    Profil pro
    sans
    Inscrit en
    Mars 2003
    Messages
    579
    Détails du profil
    Informations personnelles :
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Mars 2003
    Messages : 579
    Points : 1 366
    Points
    1 366
    Par défaut
    No pb, je garde ce topic au chaud et je l'inclurais ds la FAQ Struts, c vraiment un truc tendu !!!

    @+

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [STRUTS] balise <bean:write> dans <html:link>
    Par adrien.nicolet dans le forum Struts 1
    Réponses: 8
    Dernier message: 25/10/2005, 08h56
  2. Struts et <bean:write>
    Par vicros dans le forum Struts 1
    Réponses: 3
    Dernier message: 17/06/2005, 15h37
  3. [Struts][JSP] Format avec bean:write
    Par cowa dans le forum Servlets/JSP
    Réponses: 20
    Dernier message: 19/05/2004, 18h16
  4. [STRUTS] [JAVA] Affichage conditionnel de bean:write
    Par babylone7 dans le forum Struts 1
    Réponses: 6
    Dernier message: 29/04/2004, 16h20
  5. [STRUTS] bean:write
    Par lfournial dans le forum Struts 1
    Réponses: 3
    Dernier message: 30/01/2004, 09h58

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