2017-05-24 11 views
0

現在のマシンのIPアドレスをVelocityテンプレートで表示しようとしています。私は、単にこの行を含めることによってこれを行うことができると仮定した。VelocityテンプレートでInetAddressを使用

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

ただし、行は評価されずそのまま表示されます。

null参照[テンプレート 'login.vm'、行43、列11]:ログがnull参照示す。$ java.net.InetAddress.getLocalHostを()のgetAddress()解決できません。

どうしたのですか?

+0

テンプレートの完全な例を提供できますか?単純にこの行を追加してもこのエラーは発生しません – Andremoniy

+0

ファイル全体がShibboleth IdPプロジェクトから来ていますが、長さは約130行で利用可能です[https://github.com/uchicago/shibboleth-oidc/blob /master/idp-webapp/src/main/webapp/idp/views/login.vm) – Thaoden

+0

いいえ、ありがとう、もう必要ありません。私の答えを参照してください – Andremoniy

答えて

0

それは次のように行われるべきであるdocumentationによると:

1)コンテキストに必要なクラスを追加します。

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)テンプレートでそのメソッドを取得するため、この名前を使用します。

$InetAddress.getLocalHost() 

また、$InetAddress.getLocalHost().getAddress()は、IPアドレスとして表示できないバイト配列を返します。配列のtoString()の値が表示されます。 $InetAddress.getLocalHost().getHostAddress()を使用するほうが良い。

+0

これは私がJavaクラスを制御できると仮定していますか?それ以外の場合はどうすれば文脈に入れることができますか? – Thaoden

+0

@Thaoden、これは 'VelocityContext'です。ベロシティテンプレートのレンダリング段階を制御できない場合は、おそらくそれを行うことはできません。より明確に私の編集を参照してください – Andremoniy

+0

明確化のためにありがとう。どのように私はローカルのIPアドレスを表示することができるかについての他のアイデア? – Thaoden

関連する問題