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 :

Gestion saisie utilisateur non String


Sujet :

Struts 1 Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 55
    Points : 46
    Points
    46
    Par défaut Gestion saisie utilisateur non String
    Bonjour,

    Je cherche à utiliser directement mes BO dans ma couche présentation d'une appli web. Je ne vois pas comment gérer des propriétés non String en cas de mauvaise saisie utilisateur (ex : saisie 'abc' pour une propriété Integer).
    Je travaille actuellement sous Struts 1. J'ai essayé d'utiliser le plugin Validator, mais la méthode de validation s'exécute après l'attribution des valeurs saisies dans les propriétés des beans, donc ça plante avant que mon propre code puisse prendre la main.
    J'ai lu quelques trucs sur Struts 2, notamment qu'on peut utiliser directement des BO (Harvesting input et Type conversion). Je me suis dit, cool, ça va gérer directement ces problèmes de conversion. J'ai testé rapidement, mais ça plante toujours.

    Ma question : y a-t-il un moyen de gérer des attributs non String directement ? Càd sans faire une validation JS côté client et sans passer par des propriétés de type String pour faire une conversion vers la propriété du bean après.

    Cordialement.

  2. #2
    Membre expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 938
    Points : 3 938
    Points
    3 938
    Par défaut
    Ce sujet a été traité des tonnes de fois sur ce forum, une petite recherche rapide t'aurait plus aidé, voila un exemple ici

  3. #3
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Points : 9 529
    Points
    9 529
    Billets dans le blog
    1
    Par défaut
    Il a bien précisé "sans javascript"...

    Regarde les plugin struts, ça pourrait répondre à ta problématique (à savoir une conversion automatique de la valeur String issue de request vers une instance typée du formulaire).
    Dans le struts-config.xml, tu rajoutes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    ...
    <plug-in className="ton.package.StrutsBootstrapPlugin"
            id="converter" />
    ...
    Le code de StrutsBootstrapPlugin qui enregistre les "convertisseurs" par type
    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
     
    package com.obia.safe.struts;
     
    import javax.servlet.ServletException;
     
    import org.apache.commons.beanutils.ConvertUtils;
    import org.apache.struts.action.ActionServlet;
    import org.apache.struts.action.PlugIn;
    import org.apache.struts.config.ModuleConfig;
     
    public class StrutsBootstrapPlugin implements PlugIn
    {
     
        public StrutsBootstrapPlugin()
        {
        }
     
        public void destroy()
        {
        }
     
        public void init(ActionServlet arg0, ModuleConfig arg1)
            throws ServletException
        {
            ConvertUtils.register(new ConverterDate(), java.util.Date.class);
            ConvertUtils.register(new ConverterDouble(), java.lang.Double.class);
            ConvertUtils.register(new ConverterFloat(), java.lang.Float.class);
     
        }
    }
    Le code d'un converter (ConvertFloat)
    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
     
    package com.obia.safe.struts.converters;
     
    import java.text.DecimalFormat;
    import org.apache.commons.beanutils.Converter;
     
    public class ConverterFloat implements Converter
    {
        private Object defaultValue = null;
     
        public ConverterFloat()
        {
            this.defaultValue = null;
        }
     
        public ConverterFloat(Object defaultValue)
        {
            this.defaultValue = defaultValue;
        }
     
        public Object convert(Class type, Object value)
        {
            return convert(type, value, "#,###.00");
        }
     
        public Object convert(Class type, Object value, String pattern)
        {
            if (value == null) return defaultValue;
     
            if (value instanceof Float) return value;
     
            try
            {
                String _value = value.toString();
                _value = _value.replaceAll(" ", "");
                if (_value.length() == 0) return defaultValue;
     
                DecimalFormat df = new DecimalFormat(pattern);
                Float ts = new Float(((Number)df.parse(_value)).floatValue());
                return ts; 
            }
            catch (Throwable e)
            {
                System.out.println("FloatConverter Error : " + e.toString());
            }
            return defaultValue;
        }
    }

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 55
    Points : 46
    Points
    46
    Par défaut
    Merci de ta réponse, mais ça ne répond pas à ma problématique. J'ai déjà fait des recherches sur le sujet, mais je n'ai pas trouvé de réponse convenable (peut être que je n'utilise pas les bons termes de recherche)

    Comme j'ai dit, je ne souhaite pas une validation JS. J'ai déjà un mécanisme de gestion d'erreurs côté serveur. J'aimerais autant pouvoir m'en servir pour ces erreurs de conversion.
    Jusqu'à maintenant, j'ai toujours utilisé des DTO dont les attributs étaient de type String. Seulement, ce mécanisme ne me plaît pas pour diverses raisons, d'où mon intention de me servir directement de mes BO.

    Ce que je cherche, c'est un mécanisme générique, afin qu'une fois en place, quelque soit le type d'action je puisse générer des messages d'erreur vers l'utilisateur sans avoir à coder des trucs spécifiques à l'action courante.

    Je ne souhaite pas :
    - gérer du JS pour chaque champ non String,
    - pour chaque attribut non String d'un BO, avoir à générer une propriété dans mon Form, puis la valider, puis la transférer dans mon BO.

    Ca me semble pourtant être un besoin basique, et je m'étonne en effet de ne trouver aucune infos là dessus.


    EDIT : Merci OButterlin, je vais voir ce que je peux avec ta réponse.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 55
    Points : 46
    Points
    46
    Par défaut
    Bonjour,

    Ta solution, OButterlin, ne me convient pas non plus, car elle implique d'échanger une saisie erronée pour une valeur par défaut, mais ne permet pas d'informer l'utilisateur puisque tout s'exécute avant qu'on ai la main.
    Il n'y a pas l'air d'avoir de solution évidente pour Struts 1. J'ai tout de même trouvé ce bout de PDF qui propose un début de réponse. Il faudrait que je me penche dessus.

    Par contre, je suis tombé sur cette doc pour Struts 2. Si je la comprends bien, ça répond exactement à ma problématique, non ?

    Cordialement.

  6. #6
    Membre actif
    Homme Profil pro
    Développeur Java
    Inscrit en
    Août 2007
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Août 2007
    Messages : 197
    Points : 246
    Points
    246
    Par défaut
    peut-être qu'une gestion particulière de l'exception via le handler d'exception avec struts, avec redirection vers la page en cours (+affichage d'un message générique) pourrais solutionner ton pb

    ps: à prendre avec la solution de OButterlin: à la place des "return defaultValue" tu remonte une exception MonExceptionAMoi, qui sera gérée via ton handler d'exception.

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 55
    Points : 46
    Points
    46
    Par défaut
    Bon, j'ai décidé de mettre en place la solution suivante :
    - Validation JS avec Struts Validator customisé pour généré des messages identiques à ma validation métier. Cette validation vérifie uniquement que la saisie pourra être convertie dans le type attendu.
    - La solution d'OButterlin pour la conversion (un champ vide doit me renvoyer null, dates au format dd/MM/yyy...)

    Et je verrais avec mon chef, quand il sera de retour de vacances, si on ne peut pas envisager de changer de framework. Le but étant de créer un noyau applicatif pour de futures appli, autant utiliser des technos plus récentes.

    Merci pour vos réponses.

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

Discussions similaires

  1. [SP-2010] Gestion d'utilisateurs non AD
    Par Gratiano dans le forum SharePoint
    Réponses: 2
    Dernier message: 15/04/2014, 21h17
  2. [Débutant] Exceptions pour la gestion des saisies utilisateurs
    Par CompuTux dans le forum C#
    Réponses: 4
    Dernier message: 19/08/2011, 01h07
  3. Réponses: 3
    Dernier message: 13/12/2006, 10h04
  4. [langage] saisie utilisateur
    Par caro_du_94 dans le forum Langage
    Réponses: 13
    Dernier message: 03/06/2004, 18h05
  5. Gestion des Utilisateurs depuis une application
    Par LLaurent dans le forum XMLRAD
    Réponses: 4
    Dernier message: 25/03/2003, 16h29

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