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差?我從來沒有遇到過這樣的系統消耗。 –