FreeMarker和数组如何将项目分配到特定位置

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)

Pho*_*ixS 5

来自 FreeMarker 的常见问题解答:

FreeMarker 模板语言不支持序列/哈希的修改。它用于显示已经计算的内容,而不是用于计算数据。保持模板简单。但不要放弃,您将在下面看到一些建议和技巧。

下面还有更多内容:

例如,您想以某种非常智能的方式显示关键字索引,其算法需要您创建和写入一些序列变量。那么你应该做这样的事情(丑陋的情况有丑陋的解决方案......):

<#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> 
Run Code Online (Sandbox Code Playgroud)

也就是说,您将演示任务的复杂部分从模板移出到 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中阅读完整条目