我在 java/spring 中使用模板引擎 freemarker (v. 2.3.31)。目标:在我的 <#list></#list> 中,我想通过在另一个文件 (dog-detail.html.ftl) 中定义的宏来渲染每只狗的数据。
<#import "../base/templates/dog-detail.html.ftl" as detail>
...
<div class="content">
<label>${(data.title)!""}</label>
<#if (data.dogs)?has_content>
<#list (data.dogs) as dog >
<label>inside dog detail</label>
<@detail.detail dog?index+1 />
</#list>
<#else>
<label>no dogs here ...</label>
</#if>
</div>
狗-detail.html.ftl:
<#macro detail index>
<label>Hello I am the ${index}. dog. My name is ${(dog.name)!""} i am ${(dog.age)!""} years old</label>
</#macro>
我的json:
{
"title": "hello i am a title",
"dogs": [
{
"name": "Bello",
"age": 5
},
{
"name": "Bella",
"age": 4
},
{
"name": "Woof",
"age": 10
}
]
}
输出:
<div class="content">
<label>hello i am a title</label>
<label>inside dog detail</label>
<label>Hello I am the 1. dog. My name is i am years old</label>
<label>inside dog detail</label>
<label>Hello I am the 2. dog. My name is i am years old</label>
<label>inside dog detail</label>
<label>Hello I am the 3. dog. My name is i am years old</label>
</div>
我从来没有遇到过访问宏中的数据的问题,但是每当我尝试访问宏中列表中的条目时,它都不起作用。我究竟做错了什么?
我试图将整个“狗”作为参数传递给宏,这不起作用,因为 freemarker 似乎无法将整个 json 节点作为参数处理。
目前的工作
将索引传递给宏时,可以像这样访问数据:${(data.dogs[index-1].name)!""}
.