Выражение Freemarker в выражении

#java #freemarker

#java #freemarker

Вопрос:

в моем шаблоне я хотел бы реализовать некоторую динамическую логику, основанную на XML, который я обрабатываю, я хочу получить курс валюты из моего dict в моем шаблоне.

—мой XML

 <Message>
...
<Currency1>EUR<Currency1>
<Currency2>USD<Currency2>
...
<Message>
  

— мой шаблон

 <#assign EUR = {"AED":503178,"USD":0.923}>
{${doc.Message...Currency1}.${doc.Message...Currency2}} <-- but something like this is not possible-->
-->
  

Я ожидаю, что оно войдет в dict и даст мне 0,923 на основе валюты в моем XML.
Есть ли какой-либо другой способ, который работает?

Ответ №1:

Вы можете использовать namespace специальную переменную следующим образом:

 <#assign Currency1="EUR">
<#assign Currency2="USD">
<#assign EUR = {"AED":503178,"USD":0.923}>
${.namespace[Currency1][Currency2]}
  

Но я рекомендую изменить вашу модель для большей ясности. Например:

 <#assign Currency1="EUR">
<#assign Currency2="USD">
<#assign rates= {
        "EUR" : {"AED":4.3,"USD":0.923},
        "USD" : {"AED":3.67,"USD":1.17}
}>
${rates[Currency1][Currency2]}