Определение переменной Freemarker, ссылающейся на другую переменную - PullRequest
0 голосов
/ 10 сентября 2011

Я использую Freemarker (FMPP) для настройки текстового файла. Я хочу, чтобы файл свойств определял данные интерполяции следующим образом:

VAR1=some-value
VAR2=${VAR1}

Это очень упрощено из моих реальных файлов, но сохраняет суть моего варианта использования. Шаблон содержит ссылку на форму ${VAR2}, которая, как я ожидаю, приведет к интерполяции some-value. Вместо этого интерполированное значение является литералом ${VAR1}.

Обратите внимание, что это не то же самое, что Может ли интерполяция свободного маркера содержать интерполяцию? , которая относится к использованию значения переменной в качестве имени переменной (косвенная ссылка). Кроме того, решение может сделать свободным маркером вторую замену , включающую изменение шаблона. Я хотел бы, чтобы подмена происходила концептуально «до» обработки шаблона, чтобы шаблон мог ссылаться только на ${VAR2} и не нуждался в информации о двойной интерполяции.

Есть ли способ сделать это во FreeMarker?

Если нет, может кто-нибудь сказать мне, если Velocity сделает это легко?

1 Ответ

2 голосов
/ 10 сентября 2011

Переменные, на которые вы ссылаетесь в файле .properties, всегда происходят из одного и того же файла .properties?Если это так, то вы можете просто написать пользовательский FMPP DataLoader, который выполняет все необходимые замены, прямо при загрузке файла.(Или загрузчик данных tdd может также добиться чего-то подобного, используя get(varname) и, возможно, некоторые eval(...) -ы, но это, вероятно, слишком многословно для этой цели.)

Что касается решения этой проблемы наНа уровне языка шаблонов потребуется, чтобы выходные данные ${...} были повторно интерпретированы как фрагмент шаблона, а затем я предполагаю и то, что в выводе не будет ничего похожего на конструкцию языка шаблонов.Я не знаю ни о каком языке шаблонов, который делает это.Однако в FreeMarker можно решить, если строки, где это требуется, обернуты пользовательской реализацией TemplateScalarModel, которая выполняет эту повторную оценку всякий раз, когда что-то читает значение строки.(Чтобы использовать такой пользовательский TemplateModel в FMPP, вам также понадобится специальный загрузчик данных FMPP, который специальным образом обернет строки перед возвратом в FMPP.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...