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

JSF Java Discussion :

[RichFaces 3.3 / JSF 1.2] Mettre en évidence un champ en erreur dans une dataTable


Sujet :

JSF Java

  1. #1
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2004
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

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

    Informations forums :
    Inscription : Juin 2004
    Messages : 47
    Par défaut [RichFaces 3.3 / JSF 1.2] Mettre en évidence un champ en erreur dans une dataTable
    Bonjour tout le monde,

    je suis sur un casse-tête: j'ai une dataTable avec des champs de saisie pour des montants (avec interrogation du serveur à la sortie de chaque champ). J'ai utilisé un converter pour mettre en forme mes montants saisis et contrôler les erreurs de saisie (genre: des caractères). En cas d'erreur de conversion dans le getAsObject du converter, je mets à jour le style de mon component pour l'afficher en rouge. ça fonctionne bien lorsque je suis sur le dernier champ saisi mais si je reviens sur un champ saisi précedemment, j'ai bien mon message d'erreur mais pas de mise en forme de mon champ de saisie.

    Est-il possible donc de mettre en évidence un champ en erreur dans une rich:dataTable? Si oui, comment procéder? L'utilisation du Converter est-elle correcte?

    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
     
    public Object getAsObject(final FacesContext context, final UIComponent component,
    			final String value) {
    		String localValue = value;
    		Object retour = null;
    		final BigDecimal montant_zero = BigDecimal.ZERO;
    		HtmlInputText htmlInputText = (HtmlInputText) component;
    		boolean erreurFormat = true;
     
    		BigDecimal valueBigDecimal;
     
    		if (context == null || component == null) {
    			throw new NullPointerException();
    		}
     
    		if (localValue != null) {
    			localValue = localValue.replace(",", ".");
    			if ("".equals(localValue.trim()) || "0".equals(localValue) || "0.0".equals(localValue)
    					|| "0.00".equals(localValue)) {
    				erreurFormat = false;
    				retour = localValue;
    			}
     
    			localValue = localValue.trim();
    			if (localValue.length() >= 1) {
    				try {
    					if (BigDecimal.valueOf(Double.valueOf(localValue)).compareTo(
    							BigDecimal.ZERO) > 0) {
    						valueBigDecimal = BigDecimal.valueOf(Double.valueOf(localValue))
    								.setScale(2, BigDecimal.ROUND_HALF_EVEN);
    						erreurFormat = false;
    						retour = valueBigDecimal;
    					} else {
    						erreurFormat = false;
    						retour = (montant_zero);
    					}
     
    				} catch (NumberFormatException nfe) {
    					htmlInputText.resetValue();
    					erreurFormat = true;
    					throw new ConverterException(MessageFactory.getMessage(context,
    							DECIMAL_ID, localValue, "198.23",
    							MessageFactory.getLabel(context, component)), nfe);
    				} catch (Exception e) {
    					((HtmlInputText) component).resetValue();
    					throw new ConverterException(e);
    				} finally {
    					if (!erreurFormat) {
    						htmlInputText.setStyle("background-color:white");
    					} else {
    						htmlInputText.setStyle("background-color:red");
    						retour = (montant_zero);
    					}
    				}
    			}
    		}
    		return retour;
    	}

  2. #2
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Par défaut
    le code de la dataTable serait plus utile.

  3. #3
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2004
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

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

    Informations forums :
    Inscription : Juin 2004
    Messages : 47
    Par défaut
    De fait, j'ai trouvé une solution:
    dans le getAsObject, en cas d'exception j'invalide mon composant et réinitialise sa valeur comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ((HtmlInputText) component).setSubmittedValue("");
    ((HtmlInputText) component).setValid(false);
    ((HtmlInputText) component).setLocalValueSet(false);
    Ensuite dans le getAsString, je teste la validité du composant et change son tyle en fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    HtmlInputText htmlInputText = (HtmlInputText) component;
    if (!htmlInputText.isValid()) {
        htmlInputText.setStyle(STYLE_MONTANT_ERREUR);
    } else {
        htmlInputText.setStyle(STYLE_MONTANT_VALIDE);
    }

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 20/10/2011, 15h46
  2. [RichFaces] CommandLink dans une dataTable
    Par lemaxou64 dans le forum JSF
    Réponses: 1
    Dernier message: 04/02/2009, 11h18
  3. Réponses: 3
    Dernier message: 26/11/2007, 12h11
  4. [C#2.0] Mettre à jour la base de données à partir d'une DataTable
    Par Rodie dans le forum Accès aux données
    Réponses: 6
    Dernier message: 16/05/2007, 14h24
  5. mettre un message d'erreur dans une table
    Par sam01 dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 16/12/2006, 16h56

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