2017-10-06 201 views
0

我想从另一个变量赋值变量。我的代码看起来像这样从另一个变量赋值变量

<#macro ctglink c rhs x y z m e b> 
    <#assign ctg> 
     <#if ctgroutes["${y}..${x}-${m}"]??>ctgroutes['${y}..${x}-${m}'] 
     <#elseif ctgroutes["${x}..${y}-${m}"]??>ctgroutes['${x}..${y}-${m}'] 
     <#else>{}</#if> 
    </#assign> 

然而,这ctg变量被评估,只是ctgroutes['227..257-TPPMD04X02']它不是实际评估字符串本身。

我试过?eval?interpret以及其他一些非常黑客的事情,以使其工作,没有去。即使{}是一个字符串

基本上,我需要分配功能,像老的PHP eval()函数或其他东西。我试图访问映射的值,这些映射的键是从数据的状态派生而来的,所以我没有看到任何简单的方法来查询我的映射而没有对键进行评估。

更新:

  • 我忘了包括在elseif
  • 无论哪种方式,我想<#assign ctg = ctgroutes["${y}..${x}-${m}"]!ctgroutes["${x}..${y}-${m}"]>但我得到以下错误:

引起:freemarker.core.InvalidReferenceException :以下评估为空或丢失: ==> ctgroutes [“$ {y} .. $ {x} - $ {m}”]!ctgroutes [“$ {x} .. $ {y} - $ {m}“] [在第5行第24列的模板”RouteCompare-WptTable.ftlh“中]

我想一个null结果只返回一个空的地图,但是这似乎并不可能:

Caused by: java.lang.RuntimeException: freemarker.core.InvalidReferenceException: The following has evaluated to null or missing: 
==> ctgroutes["${y}..${x}-${m}"]!ctgroutes["${x}..${y}-${m}"] [in template "RouteCompare-WptTable.ftlh" at line 5, column 24] 

所以基本上,我的目标是我需要分配,可以采取1 3变量值:

  1. ctgroutes [ “$ {Y} .. $ {X} - $ {米}”] //假设不是null
  2. ctgroutes [“$ {X} .. $ { y} - $ {m}“] //假设它不为空
  3. {} //空的地图

这样做的最佳方法是什么?

回答

1

如果我的理解以及你想达到什么,你可以写这样的:

<#assign ctg = ctgroutes["${y}..${x}-${m}"]!ctgroutes["${x}..${y}-${m}"]!{}> 

还要注意的是<#assign target>...</#assign>是捕获两个标签之间打印输出到target变量(而不是实际上打印它)。因此target将始终存储字符串或标记值。此外FreeMarker标签和${}之外的内容只是静态文本,不会被解析。所以,天真但工作的方法是使用#if/#elseif/#else并在其中各有一个单独的#assign ctg = ...,但您可以使用!运算符进行分类,就像它显示的那样。

+0

谢谢,虽然我更新了我的问题,因为这个建议没有起作用 –

+0

我已经更新了一遍......我想你最终需要'!{}',而不是'!“{}”',即你想要一个真正的空地图。 – ddekany