4

既に含まれているテンプレートのリストを取得しようとしていますTemplateCache(これは非公開で、構成の背後に隠されています)。

小さな管理 UI をテンプレートに書き込んで、既にキャッシュされているものを表示し、configuration.removeTemplateFromCache(String)すべてではなく特定のテンプレートを呼び出しようとしています (clearTemplateCacheクリアしすぎて、ファイル IO が多すぎます)。別の方法としては、テンプレート名の並列リストを Set に保持し、それをキーのリストとして使用することですがFreeMarker、一貫性のためにこれを提供すると便利です。

また、構成の背後にあるコンテンツを非表示にする理由もありTemplateCacheます (公開メソッドを介したキーによる削除は許可しますが、キーのリストは許可しません)。アンチパターンのようです。

4

1 に答える 1

1

これTemplateCacheは一種の実装の詳細です (Java では FreeMarker パッケージのみを表示することが許可されていないため、公開されていると思います)。CacheStorageより良い質問は、から を取得できない理由ですConfigurationCacheStorageとにかく、問題の時点​​では、インターフェースがそれを照会する方法を提供していないため、FreeMarker でさえテンプレートのリストを認識していません。CacheStorageただし、そのようなメソッドを提供するを介して独自の実装をプラグインしConfiguration.setCacheStorage、それへの参照を FreeMarker の外部のどこかに保持することができます。ええ、それを簡単に取得できないのはちょっと厄介ですConfiguration...しかし、明るい面では、好きなようにキャッシュアクティビティを監視できます。

更新: FreeMarker 2.3.20 には がConfiguration.getCacheStorage()あるため、非表示にはなりません。

于 2012-12-15T20:08:00.213 に答える