use*_*249 -1 arrays freemarker
我需要修改给定 FreeMarker 中位置的数组元素。
var arr = [];
arr[0] = "Jani";
arr[1] = "Hege";
arr[2] = "Stale";
arr[3] = "Kai Jim";
arr[4] = "Borge";
Run Code Online (Sandbox Code Playgroud)
可以在 freemarker 中做到这一点,你可以教我一个例子
<#macro cuenta d >
<#assign posicion=0>
<#assign arregloCuenta=[]>
<#list args.array?split(",") as value>
<#assign posicion=posicion+1>
<#if d.properties["bchile:tipodoc"]?exists >
<#if d.properties["bchile:tipodoc"] == value>
<#assign arregloCuenta=["juan"]>
<#assign arregloCuenta= arregloCuenta + ["felipe"]> ${args.array[0]} ${posicion} ${arregloCuenta[1]} </#if> </#if> </#list> </#macro>
Run Code Online (Sandbox Code Playgroud)
来自 FreeMarker 的常见问题解答:
FreeMarker 模板语言不支持序列/哈希的修改。它用于显示已经计算的内容,而不是用于计算数据。保持模板简单。但不要放弃,您将在下面看到一些建议和技巧。
下面还有更多内容:
例如,您想以某种非常智能的方式显示关键字索引,其算法需要您创建和写入一些序列变量。那么你应该做这样的事情(丑陋的情况有丑陋的解决方案......):
Run Code Online (Sandbox Code Playgroud)<#assign calculatedResults = 'com.example.foo.SmartKeywordIndexHelper'?new().calculate(keywords)> <#-- some simple algorithms comes here, like: --> <ul> <#list calculatedResults as kw> <li><a href="${kw.link}">${kw.word}</a> </#list> </ul>也就是说,您将演示任务的复杂部分从模板移出到 Java 代码中。请注意,它不会影响数据模型,因此表示仍然与其他应用程序逻辑分开。当然,缺点是模板作者需要 Java 程序员的帮助,但对于复杂的算法来说,这可能是需要的。
它还说尝试使用序列连接和序列切片比这个技巧更好。
对于切片和连接,你可以这样想:
seq[0..pos-1] + ["New element"] + seq[pos+1..]
Run Code Online (Sandbox Code Playgroud)
您可以在http://freemarker.org/docs/app_faq.html#faq_modify_seq_and_map中阅读完整条目