首页 > 解决方案 > 如何在freemarker中创建字符串的哈希到命名空间变量?

问题描述

我是 freemarker 的新手,想解决以下问题。

我有一些命名空间变量

前任:

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

我想把它放到一个哈希中。我可以想到三种方法,但我不确定它们是否正确?

方法一

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

方法二

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

方法三

<#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

标签: dictionarynamespacesvariable-assignmentfreemarkervariable-declaration

解决方案


如果我很了解你想要什么,就像这样:

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

<@.../>用于调用宏(或其他用户定义的指令),因此不相关。除非myNamespace.varA等是宏,并且您想将它们的输出放入该哈希中,但我想情况并非如此。


推荐阅读