2017-05-24 3 views
0

J'essaie d'afficher l'adresse IP de la machine actuelle dans un modèle Velocity. Je supposais que je pouvais le faire simplement en incluant la ligneUtiliser InetAddress dans le modèle Velocity

$java.net.InetAddress.getLocalHost().getAddress() 

dans le modèle.

Cependant, la ligne n'est pas évaluée et est affichée telle quelle; le journal montre une référence null:

référence null [modèle 'login.vm', ligne 43, colonne 11]:. $ java.net.InetAddress.getLocalHost() getAddress() ne peut pas être résolu.

Qu'est-ce que j'ai fait de mal?

+0

Pouvez-vous fournir plus d'exemple complet de votre modèle? Parce que simplement ajouter cette ligne ne cause pas cette erreur – Andremoniy

+0

Le fichier entier provient du projet Shibboleth IdP, il est long de 130 lignes et est disponible [ici] (https://github.com/uchicago/shibboleth-oidc/blob /master/idp-webapp/src/main/webapp/idp/views/login.vm) – Thaoden

+0

Non, merci, ce n'est plus nécessaire. Voir ma réponse – Andremoniy

Répondre

0

Selon le documentation il devrait se faire de la manière suivante:

1) ajouter la classe désirée au contexte:

Template t = ve.getTemplate("q44153836.vm");  

VelocityContext context = new VelocityContext(); 
context.put("InetAddress", java.net.InetAddress.class); 

StringWriter writer = new StringWriter(); 
t.merge(context, writer); 

2) utiliser ce nom pour récupérer ses méthodes dans le modèle:

$InetAddress.getLocalHost() 

Notez également que $InetAddress.getLocalHost().getAddress() retournera votre tableau d'octets qui ne peut être affiché comme adresse IP. Il affichera la valeur toString() du tableau. Mieux vaut utiliser $InetAddress.getLocalHost().getHostAddress().

+0

Cela suppose que j'ai le contrôle sur les classes Java? Ou comment puis-je mettre quelque chose dans le contexte? – Thaoden

+0

@Thaoden, ceci est un 'VelocityContext'. Si vous n'avez aucun contrôle sur la phase de rendu du modèle de vélocité, vous ne pouvez peut-être pas le faire. Voir mon édition pour plus de clarté – Andremoniy

+0

Merci pour la clarification. Une autre idée sur la façon dont je pourrais afficher l'adresse IP locale? – Thaoden