2011-09-09 4 views
0

Freemarker (FMPP)를 사용하여 텍스트 파일을 사용자 정의하고 있습니다.다른 변수를 참조하는 Freemarker 변수 정의

VAR1=some-value 
VAR2=${VAR1} 

이 매우 내 실제 파일에서 단순화하지만 내 사용 사례의 본질을 유지하고 다음과 같이 나는 보간 데이터를 정의하는 속성 파일을 갖고 싶어. 템플릿에는 ${VAR2} 양식의 참조가 포함되어 있으며, 이는 내삽 된 some-value이 될 것으로 예상됩니다. 대신 보간 값은 ${VAR1} 리터럴입니다.

변수의 값을 변수 이름 (간접 참조)으로 사용하는 것을 의미하는 Can a freemarker interpolation contain an interpolation?과 다릅니다. 또한 can freemarker do second replacement의 해결 방법은 템플릿을 수정하는 것입니다. 템플릿이 처리되기 전에 개념적으로 대체가 발생하기를 원합니다. 그러면 템플릿은 ${VAR2}만을 참조 할 수 있으며 이중 보간을 인식 할 필요가 없습니다.

FreeMarker에서이를 수행 할 수있는 방법이 있습니까?

만약 그렇지 않다면, Velocity가 이것을 쉽게 할 수 있는지 말해 줄 수 있습니까?

답변

2

.properties 파일에서 참조하는 변수가 항상 .properties 파일에서 오는가? 그렇다면 파일로드시 필요한 모든 대체 작업을 수행하는 사용자 정의 FMPP DataLoader을 작성할 수 있습니다. (또는, tdd 데이터 로더는 get(varname) 어쩌면 일부 eval(...) -s를 사용하여 비슷한 일을 달성 할 수 있지만, 아마도이 목적을 위해 너무 자세한입니다.) 템플릿 언어 수준에서이를 해결로

를, 그것은 필요 ${...}의 결과가 템플릿 조각으로 재 해석되고 출력물에 템플릿 언어 구문처럼 보이지 않을 때까지는 그 부분을 다시 생각합니다. 이 작업을 수행하는 템플릿 언어에 대해서는 알지 못합니다. 그러나 FreeMarker에서 문자열이 필요하면 문자열이 문자열의 값을 읽을 때마다 반복되는 평가를 수행하는 사용자 정의 TemplateScalarModel 구현으로 래핑됩니다. (FMPP에서 이러한 사용자 정의 TemplateModel을 사용하려면 사용자 정의 FMPP 데이터 로더가 필요합니다.이 로더는 FMPP로 반환하기 전에 문자열을이 특수한 방법으로 래핑합니다.)

+0

그게 내가 생각한 것이고, 나는 같은 결론. 프로퍼티 변수를 먼저 템플릿 (외부 매개 변수를 대체하기 위해)으로 처리 한 다음 '실제'템플릿의 두 번째 변환에 입력으로 사용하는 2 단계 솔루션을 작성했습니다. –

관련 문제