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; }
Partager