2

Velocityテンプレートに非常に複雑なダイナミックHTML構造をいくつか追加する必要があります。これらをテンプレートに直接書き込もうとすると、絶対に混乱します。

私がやろうとしていることを説明しましょう...たとえば、私のWebサイトで、ユーザーがコメントを投稿できるとします。コメントテーブルと投稿フォームに含まれるすべての複雑なダイナミックHTML構造を記述するのではなく、テンプレートでこれを実行できるようにしたいと思います。

<div>
    // call to a method that generates the comments table
</div>
<div>
    // call to a method that generates the comments form
</div>

Ruby On Railsには、ヘルパーと呼ばれるものがあり、テンプレートから、基本的に、動的に生成されたHTMLのチャンクを返すメソッドを呼び出して、呼び出す場所でテンプレートに埋め込むことができます。ヘルパーの良いところは、使用するものだけにCPUを使用することです。このVelocityContext.put()方法では、必要なものをすべて事前に生成する必要があるようです。これは問題です。最終的には約50の異なるヘルパーが必要になり、プログラマー以外のWebデザイナーがそれらを自由に交換できるようにする必要があるからです。

だから私は尋ねています、

  1. Velocityでこのようなことをすることはできますか?
  2. そうでない場合は、他のテンプレートエンジンでこのようなことを行うことができますか?
  3. 私がやろうとしていることをするためのより良い方法はありますか?
4

2 に答える 2

2

Velocity Toolsをすでに検討しましたか(または使用していますか) ?私はそれらをRailsヘルパーに非常に類似していると見なす傾向があり、ビュー固有のロジックを維持するのに間違いなく最適な場所です。正確な実装に応じて、ヘルパーの配線をカスタムツールと見なし、ツールフレームワークにインスタンス化などをシームレスに管理させることができます。ヘルパーが単なるPOJOの場合は、変更なしでツールとして機能していることがわかります。

あるいは、ヘルパーがHTML構造を構築しているだけで、複雑なJava依存関係がない場合は、マクロとして作成するだけでよいでしょうか。

于 2010-11-17T10:08:51.693 に答える
1

申し訳ありませんが、脳を使わずに提出しました。やらなければならないのは、ヘルパークラスを作成することだけです。

public class HtmlHelper {

    public String getSomeHtml() {
        return "<p>badgers</p>";
    }

}

次に、コンテキストにインスタンスを追加します。

VelocityContext context = new VelocityContext();
HtmlHelper helper = new HtmlHelper();
context.put("helper", helper);

次に、テンプレートで:

<div>
    $helper.getSomeHtml()
</div>

最後に、お祝いに犬と一緒にメレンゲを踊ります。

于 2010-11-17T04:53:10.373 に答える