Chunk是json友好的。 JSON可以用作控制器代码中的标记值,或者用于exec/macro调用的模板本身。
{% exec %}
{% data @json %}
{ name: "whatever",
vitals: ["an","array","of","data"],
friends: [{name: "bob"},{name: "crystal"}]
}
{% enddata %}
<div>Name: {$name}</div>
{% if ($friends) %}
<div>Friends:
<ul>
{% loop in $friends as $friend %}
<li>{$friend.name}</li>
{% endloop %}
</ul>
</div>
{% endif %}
{% endexec %}
或者,只需使用内部模板并从java端注入json即可。
的src /主题/ example.chtml
<div>Name: {$name}</div>
{% if ($friends) %}
<div>Friends:
<ul>
{% loop in $friends as $friend %}
<li>{$friend.name}</li>
{% endloop %}
</ul>
</div>
{% endif %}
MyController.java
Theme theme = new Theme();
Chunk html = theme.makeChunk("example");
html.set("name", "whatever");
html.set("vitals", getJsonArray());
html.set("friends", getJsonFriendObjects());
html.render(out);
只要getJsonXXX()方法返回的东西,实现了列表和地图,组块将它粘到模板正确(即使这些列表和地图嵌套更多列表和地图)。
输出:
<div>Name: whatever</div>
<div>Friends:
<ul>
<li>bob</li>
<li>crystal</li>
</ul>
</div>
已经议论在问题陈述。这怎么可能是建设性的? –
已修复。不打算成为议论文。 – ccleve
您能详细解释一下为什么您认为Velocity比Freemarker差?我从来没有遇到过这样的系统消耗。 –