0

FTL は純粋にレンダリング エンジンであり、これはコントローラーで行う必要があることはわかっていますが、私のシナリオでは、同じデータの複数の表現を提供する必要があります。

XML をレンダリングし、カスタム フィルターで必要に応じて JSON に変換する FTL を簡単に作成できます。ただし、やるべきFTLは山ほどあります。データ モデルは一般的なものになります。XML アプローチはオプションですが、同じ XML 要素を何度も繰り返すことはしたくありません (さまざまなチーム メンバーが手作りの xml 要素を作成することはエラーのレシピです。マークアップが同じであることを確認する必要があるなど)。

ただし、FTLにオブジェクトを入力するだけでよいかどうか疑問に思っていました

//FreMarkerResolver が出力メタモデルをモデルの一部として公開したと仮定する someObject.addRecords( Records)

//ここにいくつかのロジック request.setAttribute("data",someObject);

したがって、私のサーブレット フィルターは、データ オブジェクトを JSON、xml、YAML、または必要なものに変換するだけです。

たとえば、FTLからセッションを変更できないことをどこかで読んだことがありますが、リクエストはどうですか? 少なくとも新しい属性を設定できますか?

ありがとう

4

1 に答える 1

0

FreeMarker 自体は、サーブレットや HTTP について何も知りません。リクエスト オブジェクトまたはセッション オブジェクトを読み取ることができる場合でも、それは既に上位レベルの Web アプリケーション フレームワークが行っています。テンプレートからこれらのオブジェクトを参照するかどうか、またどのように参照するかは、完全に Web アプリケーション フレームワーク次第です。今、私はあなたの場合にはないと仮定します。

TemplateDirectiveModelをカプセル化し、それで必要なことを行う を作成Requestし、たとえば name を使用してデータモデルにドロップすると、テンプレートでのstoreInRequestようなことができます。<@storeInRequest data=someObject />または、そのアプリで必要なものをより適切に表現する別の方法を見つけ出すこともできます。要点は、TemplateDirectiveModelは Java で実装されているため、内部で何でも実行できるということです。(同様に、関数のようなものを で実装できますがTemplateMethodModelEx、戻り値の代わりに副作用が必要な場合TemplateDirectiveModelは、より適切です。さらに、名前付きパラメーターがあります...)

于 2012-11-17T10:29:32.570 に答える