2017-05-24 5 views
0

Velocity 템플릿에 현재 컴퓨터의 IP 주소를 표시하려고합니다. 나는이 줄을 포함시킴으로써 간단하게이 작업을 할 수 있다고 생각했다.Velocity 템플릿에서 InetAddress 사용

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

을 템플릿에 포함시켰다.

그러나 줄은 평가되지 않고 그대로 표시됩니다. . $ java.net.InetAddress.getLocalHost() getAddress에() 해결 될 수

null 참조 [템플릿 'login.vm'행 43 열 11 : 로그 널 레퍼런스를 나타낸다.

내가 뭘 잘못 했니?

+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