J'ai un fichier de modèle de vélocité qui contient les données de XML. Je veux convertir la chaîne en type entier.
Comment puis je faire ça?
Aha! Été là.
#set($intString = "9")
#set($Integer = 0)
$Integer.parseInt($intString)
Cela utilise la vélocité sous-jacente de Java. La variable $ Integer n’est rien de plus qu’un objet Java Integer que vous pouvez ensuite utiliser pour accéder à .parseInt
Edit: / Le code ci-dessus est pour la démonstration. Bien sûr, il y a moyen de l'optimiser.
Si vous avez un certain contrôle sur le contexte de vélocité, voici une alternative qui évite d'avoir à définir une variable dans le modèle Velocity.
Context velocityContext = new Context();
velocityContext.put(Integer.class.getSimpleName(), Integer.class);
Cela vous permet d'appeler les méthodes statiques de Java.lang.Integer
dans votre modèle à l'aide de $Integer.parseInt($value)
et ne repose pas sur le fait que le jeu # ait été appelé avant d'effectuer la conversion de type dans le modèle.
Le problème avec parseInt
est qu’il génère une exception si la chaîne n’est pas analysable . Si vous avez le NumberTool chargé dans votre contexte, une meilleure solution que parseInt
est la suivante:
#set($intString = "009")
#set($Integer=$numberTool.toNumber($intString).intValue())
#if($Integer)
## ok
#else
## nok
#end
Parfois, NumberTool est également chargé en tant que $number
.
Cependant, un petit inconvénient est que NumberTool analyse simplement le premier numéro trouvé et ignore le reste, donc "123a" => 123.