4

私は現在、私が設計したい大量のコードを持っているプログラムを持っています。このコードは、多数のテキストファイルを受け取り、それを興味深い方法で記述されたインタープリターに渡して、他のシステムに渡されるプレーンテキストファイルレポートを生成します。理論的には、これにより、プログラマーでなくても、Javaとインタープリターの内部動作を理解していなくてもレポートを変更できます。実際には、小さな変更を加えると、インタプリタを調べて微調整する必要が生じる可能性があります(ドメイン固有言語は、他のプログラマーにとっても完全に友好的ではありません)。

このコードを再設計したいと思います。主にWebプログラマーとして、「プログラマー以外の人がレポートを変更できる...」と考えたときに最初に頭に浮かんだのは、レポートをWebページに置き換えて、「ああ、ハァッ!Jsp」と自分に言い聞かせたことです。これは、ぎこちなく書かれたDSLステートメントではなく、taglibsとjavaスクリプトレット(後でそうなる可能性があるので望ましくない)とともに、人々にとってあなたが見るものはほとんどあなたが得るものであるという素晴らしいアプローチを私に与えるでしょう。

jspをjavaにコンパイルするために使用することは可能ですがjspc(アプリケーションの別の部分はjbossサーバーでejbsを実行するため、jspcそれほど遠くありません)、使用するボイラープレートコードは、出力をページコンテキストにフックしようとします。 servletcontext。これには、コードをだましてWebコンテナー内で実行されていると思い込ませ(不可能ではありませんが、クルーゲ)、ヘッダーを削除する必要があります。

テキストファイルへの印刷に使用できるJava用の別のテンプレートアプローチ(またはライブラリ)はありますか?私がこれまで見てきたものはすべて、Web用に最適化されているか、特定のアプリケーションサーバーに緊密に結合されている(そしてWeb作業用に設計されている)ようです。

4

4 に答える 4

3

ApacheVelocityを試しみてください。これは非常にシンプルで、Webアプリケーションのコンテキストで実行されているとは想定していません。

これは完全に主観的なものですが、JSPやタグライブラリよりもプログラマー以外の方が構文を理解しやすいと思います。

于 2012-09-17T17:35:43.223 に答える
3

したがって、JSPのスリムダウンバージョンが必要です。

これ(JSTP)があなたのために働くかどうか見てください

http://jstp.sourceforge.net/manual.html

于 2012-09-17T17:53:41.273 に答える
1

おそらく、パフォーマンスが良く(速度の2〜3倍速い)、エレガントな構文(.net Razorのような)を備え、Javaプログラマー向けに特別に設計されたRythmテンプレートエンジンをチェックしたいと思うでしょう。

テンプレート、ユーザーのリストから「、」で区切られたユーザー名の文字列を生成します

@args List<User> users

@for (User user: users) {
   @user.getName() @user_sep
}

テンプレート:if-elseデモ

@args User user

@if (user.isAdmin()) {
   <div id="admin-panel">...</div>
} else {
   <div id="user-panel">...</div>
}

テンプレートファイルを使用してテンプレートを呼び出す

// pass render args by name
Map<String, Object> renderArgs = ...
String s = Rythm.render("/path/to/my/template.txt", renderArgs);

// or pass render arguments by position
String s = Rythm.render("/path/to/my/template.txt", "arg1", 2, true, ...);

インラインテキストを使用してテンプレートを呼び出す

User user = ...;
String s = Rythm.render("@args User user;Hello @user.getName()", user);

文字列補間モードでテンプレートを呼び出す

User user = ...;
String s = Rythm.render("Hello @name", user.getName());

ToStringモード

public class Address {
   public String unitNo;
   public String streetNo;
   ...
   public String toString() {
      return Rythm.toString("@_.unitNo @_.streetNo @_.street, @_.suburb, @_.state, @_.postCode", this);
   }
}

Auto ToStringモード(apache commons langのreflectionToStringBuilderに従いますが、それよりも高速です)

public class Address {
   public String unitNo;
   public String streetNo;
   ...
   public String toString() {
      return Rythm.toString(this);
   }
}

ドキュメントはhttp://www.playframework.org/modules/rythmにあります。GAEで実行されている完全なデモアプリ:http://play-rythm-demo.appspot.com

デモとドキュメントはPlay!Frameworkのplay-rythmプラグイン用に作成されていますが、ほとんどのコンテンツは純粋なrythmテンプレートエンジンにも適用されます。

ソースコード:

于 2012-09-17T22:32:35.323 に答える
1

あなたの会社で本当のトレッドセッターになりたいのなら、それを行うためのGrailsアプリケーションを作成し、Groovyテンプレートを使用することができます(おそらくスケジューリング用のQuartzプラグインと組み合わせて)。置き換えられる既存のコードがたくさんありますが、私はそれが大好きです...

http://groovy.codehaus.org/Groovy+Templates

安全な賭けが必要な場合は、(これも優れた)Velocityが必要です。

http://velocity.apache.org/

于 2012-09-17T19:01:00.337 に答える