需要更好的模板语言[关闭]

2024-01-08

对我知道那个this https://stackoverflow.com/questions/3793880/lightweight-template-engine-in-java has https://stackoverflow.com/questions/29516/template-engines-for-spring-framework been https://stackoverflow.com/questions/2613404/template-engine-recommendations asked https://stackoverflow.com/questions/2381619/best-template-engine-in-java before https://stackoverflow.com/questions/174204/suggestions-for-a-java-based-templating-engine。但大多数问题都是两年前的,今天一定有更好的答案。

我需要一种模板语言来呈现 HTML。要求:

  1. 必须可从 Java 调用。

  2. 不得是 Freemarker、Velocity 或 StringTemplate。我们已经使用 Freemarker 一年了,它太慢了。它在负载下消耗了 50% 的 CPU 周期。 Velocity 比 Freemarker 差,而 StringTemplate 也有自己的问题。

  3. 它必须使用 JSON 或其 Java 等效项,即映射、列表和基元。

我开始嫉妒 Node.js。去年,针对 Javascript 的模板活动非常多,但针对 Java 的模板活动却很少(据我所知)。

理想的语言看起来像Liquid http://liquidmarkup.org/,仅适用于 Rails。

Jade http://jade-lang.com/Java 存在,但我不希望它附带的所有 HTML 重新格式化。

Update

我最终决定车把 http://handlebarsjs.com/,这也是适用于 Java https://github.com/jknack/handlebars.java。两者都很好用。


Chunk http://www.x5software.com/chunk/对 json 友好。 JSON 可以用作控制器代码中的标记值或用于执行/宏调用的模板本身。

{% 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() 方法返回实现 List 和 Map 的内容,Chunk 就会将其正确粘合到模板中(即使这些 List 和 Map 嵌套更多 List 和 Map)。

Output:

<div>Name: whatever</div>

<div>Friends:

  <ul>
   <li>bob</li>
   <li>crystal</li>
  </ul>

</div>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

需要更好的模板语言[关闭] 的相关文章

随机推荐