Voici le code que j’ai mis dans le postValidate de l’objet (Attention : dans l’exemple en ligne, il est mis getFieldValue au lieu de getField) :
var f = this.getField("natPersonPhone2");
f.setValue("natPersonPhone2", new PhoneNumTool("fr").getNationalNumber(f.getValue()));
Voici l’erreur que j’obtiens :
020-03-04 11:18:14,713 ERROR [com.simplicite.util.RhinoScriptInterpreter] SIMPLICITE|http://e3m.simplicite.io:10118||ECORESC002|designer|com.simplicite.util.RhinoScriptInterpreter|ImmoNaturalPerson.preValidate||Erreur évaluation script: ImmoNaturalPerson
org.mozilla.javascript.EvaluatorException: Cannot convert 02 23 45 67 89 to java.lang.Integer (ImmoNaturalPerson#75) in ImmoNaturalPerson at line number 75
C’est étrange car PhoneNumTool.getNationalNumber(String) renvoie bien un String il ne devrait donc pas avoir d’ambiguïté niveau Rhino pour le choix de la méthode setField(String)…
Merci @david et @Francois.
Je confirme que le contournement proposé par @Francois règle le pb pour ma part.
J’en profite juste pour poser une autre question :
Serait-il possible d’utiliser cette même fonctionnalité (validation + ajout espace) dans javascript ? Je voudrais l’appliquer aussi lorsque l’utilisateur quitte le champ téléphone ?
Il n’y a pas dans Smplicité de lib JavaScript cliente équivalente à la libphonenumber Java de Google utilisé par la classe PhoneNumTool.
Ce genre de lib JavaScript existe (ex: https://github.com/catamphetamine/libphonenumber-js) je ne sais pas ce que ça vaut mais vous pouvez toujours en ajouter spécifiquement (en tant que resource de la disposition globale default pour l’utiliser dans les scripts Javascript clent de vos objets.
Quoiqu’il en soit, ça restera du confort, le vrai contrôle/formattage de vos numéros de tel doit se faire avant tout coté serveur. Comme pour toute règle métier, ce qui se fait dans la UI coté client n’a strictement aucune valeur, notamment car ça ne s’applique pas quand on passe par une API ou un import I/O.