我为我的问题模糊而道歉。
我使用的产品具有内置的freemarker模板引擎,可以在其上传递各种变量。因此,弄清楚如何访问某些部分是很棘手的。变量似乎有类似哈希但有一些意想不到的行为。
最终我想要实现的是迭代它的一些键(或者他们可能是孩子们)并对它们进行一些检查。
如果我硬编码我使用的变量:myvariable.paramater但我也可以使用myvariable ['参数']
当我运行以下脚本时,我没有得到任何可识别的密钥:
<#list myvariable?keys as parameter >
echo ${parameter}
</#list>
输出包含以下内容:
echo class
echo toString
echo $attributes
输出只是一堆回声,我无法使用myvariable。 &#39;键&#39; $ attributes可能是我正在寻找的密钥列表我只是不知道如何从模板中访问该参数。
有没有人知道如何找到我正在寻找的参数?
答案 0 :(得分:0)
好的,我明白了。
?keys
给我的列表是一个列表方法,比我可以像myvariable.toString()
那样运行。
诀窍是找到正确的方法。通过列表,我发现getProperties
,当我尝试回复时,它解析为SimpleHash
类型。这个对象允许我正确使用?keys
并给了我正在寻找的东西。
答案 1 :(得分:0)
这取决于FreeMarker配置以及您正在查看的对象的类。如果对象是Map
,那么?keys
应该返回其键,但是,许多框架将FreeMarker配置为返回方法并且Map
键混合,在这种情况下,您可以回退到使用Java API(如map.keys()
)。如果对象不是Map
,那么通常您会看到与方法和公共字段混合的JavaBean属性列表。如果你可以foo.x
但"x"
不在foo?keys
,那么可能会有一些特殊的Java类,比如java.util.Properties
继承,而Java本身并没有#&# 39;列出继承的密钥,但如果你知道他们的名字就可以使用它们。