Как создать хеш строки для переменной пространства имен в freemarker? - PullRequest
0 голосов
/ 06 ноября 2019

Я новичок в freemarker и хочу решить описанную ниже проблему.

У меня есть несколько переменных пространства имен

Пример:

<@myNamespace.varA/>
<@myNamespace.varB/>
<@myNamespace.varC/>

Я хочу поставитьв хеш. Есть три способа, которые я могу придумать, но я не уверен, что они верны?

Метод 1

<#assign MyHash = {
  "keyA" : <@myNamespace.varA/>,
  "keyB" : <@myNamespace.varB/>,
  "keyC" : <@myNamespace.varC/>
}>

Метод 2

<#assign MyHash = {
  "keyA" : ${myNamespace.varA},
  "keyB" : ${myNamespace.varB},
  "keyC" : ${myNamespace.varC}
}>

Метод3

<#assign varA> <@myNamespace.varA/> </assign>
<#assign varB> <@myNamespace.varB/> </assign>
<#assign varC> <@myNamespace.varC/> </assign>

<#assign MyHash = {
  "keyA" : varA,
  "keyB" : varB,
  "keyC" : varC
}>

Метод 4 (сохранение varA, varB, varC в локальной области)

<#function getMyHash>
  <#local varA> <@myNamespace.varA/> </local>
  <#local varB> <@myNamespace.varB/> </local>
  <#local varC> <@myNamespace.varC/> </local>

  <#return {
    "keyA" : varA,
    "keyB" : varB,
    "keyC" : varC
  }>
</#function>
<#assign MyHash = getMyHash()/>

Примечание:

В пространстве имен могут быть другие переменные, которые яне хочу ставить хэш как

<@myNamespace.varD/>
<@myNamespace.varE/>
... etc

1 Ответ

0 голосов
/ 07 ноября 2019

Если я хорошо понимаю, что вы хотите, например:

<#function getMyHash>
  <#return {
    "keyA" : myNamespace.varA,
    "keyB" : myNamespace.varB,
    "keyC" : myNamespace.varC
  }>
</#function>

<@.../> для вызова макросов (или других пользовательских директив), поэтому это не имеет значения. Если myNamespace.varA и т. Д. Не являются макросами, и вы хотели поместить их выходные данные в этот хеш, но я думаю, что это не так.

...