8

はい、私はこれ 以前に 尋ねられ たことを知っています。しかし、ほとんどの質問は 2 年前のものであり、今日ではより良い答えが得られるはずです。

HTML をレンダリングするためのテンプレート言語が必要です。要件:

  1. Java から呼び出せる必要があります。

  2. Freemarker、Velocity、または StringTemplate であってはなりません。Freemarker を 1 年間使用していますが、遅すぎます。負荷がかかると、CPU サイクルの 50% が消費されます。Velocity は Freemarker よりも悪く、StringTemplate には独自の問題があります。

  3. JSON、またはその Java に相当するもの、つまりマップ、リスト、およびプリミティブを使用する必要があります。

私は Node.js の羨望の的になり始めています。昨年、Javascript のテンプレート アクティビティは山ほどありましたが、Java については (私が知っている限りでは) ほとんどありませんでした。

理想的な言語は、Rails 専用のLiquidのようなものです。

Jadeは Java 用に存在しますが、それに伴うすべての HTML の再フォーマットは必要ありません。

アップデート

最終的には、 Javaでも利用できるHandlebarsに落ち着きました。どちらもうまく機能します。

4

2 に答える 2

4

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/themes/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 をネストしている場合でも)。

出力:

<div>Name: whatever</div>

<div>Friends:

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

</div>
于 2012-10-06T01:14:40.770 に答える
0

Java+は単純なプリプロセッサ ソリューションです。マークアップを文字列化するだけです:

System.out.println({{
 <html>
  <body>
   ...
  </body>
</html>}})

構成可能な区切り文字があり、Java コードを消費するのではなく通過します。

System.out.println({{
<xmlExample>
  <name>{{fpp}}</name>
  <number>{{bar}}</number>
</xmlExample>
}});

参考文献

于 2013-03-21T17:38:44.003 に答える