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 2 Java Discussion :

comment industrialiser les messages d'erreurs


Sujet :

Struts 2 Java

  1. #1
    Membre à l'essai
    Inscrit en
    Avril 2008
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 18
    Points : 19
    Points
    19
    Par défaut comment industrialiser les messages d'erreurs
    Bonjour tout le monde, voici mon premier post dans ce forum et j'espere ne pas poser une question idiote....

    Alors voici mon probleme, bien que la gestion des messages d'erreurs n'a rien de sorcier dans Struts, je le trouve un peu limité. Pour etre plus précis je trouve qu il ne permet pas d'"industrialiser les messages d'erreurs", ce qui veut dire que l'on ne peut pas aisement définir un message d'erreur par défaut, qui donne le nom du champ ou apparait l erreur, et ce qui faut mettre dans le champ.

    En clair (enfin, j espere etre assez clair) dans le cas basique des erreurs de conversion (un champ dans le formulaire associé a un attribut d'une classe action), je voudrais surcharger le message par defaut
    "xwork.default.invalid.fieldvalue=Invalid field value for field "{0}"."
    et mettre a la place quelque chose du genre
    "xwork.default.invalid.fieldvalue=erreur de conversion pour le champs "{0}", il faut un {1}." ou 1 serait un String, un int, un long etc.....

    Pour faire cela, j ai essayé de remplacer l'intercepteur "ConversionErrorInterceptor" par un intercepteur personnalisé mais je n'arrive malheureusement pas à récupérer la classe du champ sur lequel il y a une erreur......

    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
    //debut de la boucle qui permet de recuperer les messages d erreurs 
            for (Iterator iterator = conversionErrors.entrySet().iterator();
                 iterator.hasNext();) {
                Map.Entry entry = (Map.Entry) iterator.next();
                String propertyName = (String) entry.getKey();
                Object value = entry.getValue();
    
                if (shouldAddError(propertyName, value)) {
    //normalement on prend un message par defaut depuis le bean XWorkConverter
                    String message = XWorkConverter.getConversionErrorMessage(propertyName, stack);                                     
                    Object action =invocation.getAction();
    
    //on peut definir a ce niveau un nouveau message par defaut mais ........
                    String defaultMessage = LocalizedTextUtil.findDefaultText(XWorkMessages.DEFAULT_INVALID_FIELDVALUE,
                            ActionContext.getContext().getLocale(),
                            new Object[]{
                                    propertyName 
                            });
                    message=defaultMessage;
    Je peux ajouter un nouveau format pour le message par defaut mais je ne sais pas comment recuperer la classe attendu du champ ou a eu lieu l erreur.....

    En fait j aimerais pouvoir mettre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    new Object[]{
                                    propertyName , classetype
                            });
    classtype étant la classe de l'attribut dans la classe action.

    J'ai eu beau regarder les codes sources et écumer les tutoriaux en livres ou du net je n'ai pas trouvé la classe exact ou a lieu les vérification de conversion, c'est a dire les classes ou sont appellées les methodes "convertValue(Map context, Object target, Member member, String property, Object value, Class toClass)" de la classe XWorkConverter...
    Quelqu'un pourrait il m aider?


    Je pense avoir un debut de piste qui est de directement récuperer les attributs depuis l'objet action que l on recupere en lancant un getters que l on crée a partir du nom de l attribut. Mais bien que je sache comment récuperer le nom du getters d'une facon generale je ne vois pas comment lancer la methode car l aciton que l on recupere n est pas spécifié.

    Toute aide sera la bienvenue

    Cordialement
    Seraphon

  2. #2
    Membre à l'essai
    Inscrit en
    Avril 2008
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 18
    Points : 19
    Points
    19
    Par défaut
    Petite mise à jour.

    Apres avoir parcouru les codes sources de ognl, xwork et struts2, j'ai pu découvrir quelques méthodes utiles mais je n'ai pour l'instant que des résultats "intermédiaire".

    Dans une classe ConversionErrorInterceptorCustom.java qui surcharge la classe par defaut:
    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
    import com.opensymphony.xwork2.util.LocalizedTextUtil;
    import com.opensymphony.xwork2.util.OgnlValueStack;
    import com.opensymphony.xwork2.util.ValueStack;
    import ognl.MethodAccessor;
    import ognl.OgnlContext;
    import ognl.OgnlRuntime;
    .....
    ....
    ....
    //Définition du nouveau message par defaut.
                    String defaultMessage = LocalizedTextUtil.findDefaultText(XWorkMessages.DEFAULT_INVALID_FIELDVALUE,
                            ActionContext.getContext().getLocale(),
                            new Object[]{
                                    propertyName, 
    //Cet argument utilise des méthodes Ognl pour récupérer un des attributs de la classe actuellement utilisé. Le probleme est que parfois cette attribut est nul et je ne peux donc pas recuperer la classe de l'attribut
    OgnlRuntime.getProperty((OgnlContext)invocationContext.getContextMap(), stack.getRoot(), propertyName) 
                            });
                    message=defaultMessage;

    Donc voila, en utilisant des méthodes ognl je peux recuperer un attribut de la classe action utilisé mais malheureusement dans le cas ou l'attribut n'a pas encore de valeur, est nulle, on ne peut pas recuperer sa classe.....

    Quelqu'un a t'il une idée pour récuperer la classe de l'attribut dans le cas ou il est nul? est ce impossible?
    On peut récuperer avec ognl les methodes d'une classe. Peut etre peut-on recuperer la classe de l'objet normalement retourné par cette methode (la methode etant le getter de l attribut)?

    En esperant trouver une solution rapidement
    Seraphon

Discussions similaires

  1. Comment éviter les messages d'erreur lors de requêtes SQL
    Par Pentos60 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 14/01/2011, 09h38
  2. Comment supprimer les message d'erreur Gtk+ ?
    Par Slookeur dans le forum GTK+ avec C & C++
    Réponses: 1
    Dernier message: 09/06/2009, 09h29
  3. Comment éviter les messages d'erreur
    Par curt dans le forum IHM
    Réponses: 3
    Dernier message: 28/08/2008, 18h39
  4. Comment aficher les message d'erreur
    Par pierrot10 dans le forum Langage
    Réponses: 2
    Dernier message: 15/04/2008, 16h03
  5. Comment récupérer les messages d'erreurs ADO ?
    Par philnext dans le forum Bases de données
    Réponses: 6
    Dernier message: 05/04/2007, 14h01

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