web-dev-qa-db-fra.com

Comment convertir une chaîne en entier dans un modèle de vélocité?

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?

34
uma

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.

78
Quotidian

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.

9
ATG

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.

0
buergi