Apache Velocity 변수가 null 일때 공백으로 출력되게 하기

템플릿과 모델 데이터를 결합해서 파싱할때 모델에 해당 변수가 없을때 ${ XXX } 같은게 결과로 변환되어 출력된다.

찾아보니까 $!{ XXX } 요렇게 느낌표를 붙여주면 공백으로 변환된다고  하던데 일일히 바꾸기가 귀찮았다.

일일히 바꾸기 귀찮을땐 InvalidReferenceEventHandler 를 한번 써보자

InvalidReferenceEventHandler 인터페이스를 구현한 클래스를 하나 맨들고 밸로시티 Property 로 그것을 사용하도록 설정해 주면 된다.



먼저 InvalidReferenceEventHandler 인터페이스를 구현한 클래스이다.
package com.tistory.stove99;

import org.apache.velocity.app.event.InvalidReferenceEventHandler;
import org.apache.velocity.context.Context;
import org.apache.velocity.util.introspection.Info;

public class InvalidReferenceHandler implements InvalidReferenceEventHandler{

	@Override
	public Object invalidGetMethod(Context context, String reference,
			Object object, String property, Info info) {
		return "";
	}

	@Override
	public boolean invalidSetMethod(Context context, String leftreference,
			String rightreference, Info info) {
		return false;
	}

	@Override
	public Object invalidMethod(Context context, String reference,
			Object object, String method, Info info) {
		return null;
	}
}

invalidGetMethod 메소드에서 리턴을 "" 요걸로 공백을 리턴해 주면 된다.


이제 클래스를 맨들었으니 요걸 밸로시티에서 쓰도록 설정해 보자.

velocityProperties 에 기존에 설정된 프로퍼티에 아래와 같이 추가하면 된다.
eventhandler.invalidreferences.class = com.tistory.stove99.InvalidReferenceHandler

이제 해보면 아마 잘될꺼임.