1

複数のフィールドを区切り記号で結合し、余分な区切り記号を追加せずに空または null 文字列を除外する速度テンプレートで最も簡潔で読みやすい方法は何ですか?

例として、次のようなツールチップまたは予定があります。

Appointment ($number) [with $employee] [-] [$remarks] [-] [$roomToVisit]

オプションのデータを示すために括弧を使用した場所。入力すると、通常は次のように表示されます

Appointment (3) with John - serve Java coffee - ballroom

$remarks が空で $roomToVisit が空でない場合、次のようになります。

Appointment (3) with John - ballroom

代わりに $roomToVisit が空の場合、次のようになります。

Appointment (3) with John - serve Java coffee

両方が空の場合:

Appointment (3) with John

おまけ:フィールドプレフィックスもオプションにします。$employee のみが空の場合、次のようになります。

Appointment (3) serve Java coffee - ballroom

理想的には、ベロシティ テンプレートが最初のコード ボックスと非常によく似ていることを望みます。これが不可能な場合、気を散らすコードタグを最小限に抑えて、どのようにこれを達成しますか?

同様のアイデア(速度の例が役立つかもしれませんが、はるかに冗長です):

4

1 に答える 1

0

Java クラスをツールとしてコンテキストに登録することで、独自の Java メソッドを呼び出すことができることがわかりました。既存の例はDisplayToolです。条件付き接頭辞と結合用のメソッド「pre」とvarargメソッド「join」を使用してVelocityStringUtilクラスを作成し、次のように登録しました。

context.put("text", new VelocityStringUtil());

これを使用して、次のテンプレートは期待される出力を作成します。

Appointment ($number)$text.pre(' ', $text.join(' - ', $text.pre('with ', $employee), $remarks, $roomToVisit))

ご覧のとおり、まだ少し醜いですが、事前定義されたディレクティブを使用するよりも優れていると思います (何かが欠けていない限り)。

于 2013-10-18T12:42:38.197 に答える