【问题标题】:How to create a hash of string to namespaced variable in freemarker?如何在freemarker中创建字符串的哈希到命名空间变量?
【发布时间】:2020-03-02 21:15:21
【问题描述】:

我是 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}
}>

方法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

【问题讨论】:

  • 你通常在java代码(之前)而不是freemarker中构建地图
  • 在将列表传递给转换后(在 Java 中),我得到了命名空间值。这部分需要在freemarker中处理。
  • myNamespace.varA的值是什么类型?你把它当作一个宏或用户定义的指令来使用,但它是吗?

标签: dictionary namespaces variable-assignment freemarker variable-declaration


【解决方案1】:

如果我很清楚你想要什么,像这样:

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

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

【讨论】:

    猜你喜欢
    • 2015-03-20
    • 2016-10-21
    • 1970-01-01
    • 2015-10-11
    • 2011-11-29
    • 1970-01-01
    • 2011-05-08
    • 2020-06-05
    • 1970-01-01
    相关资源
    最近更新 更多