目次2タイムズグッドバーチャルグローサリー
マニュアルのこの章および今後の章で示される例のソースコードは、Good Thymes Virtual Grocery GitHubリポジトリ
https://github.com/thymeleaf/thymeleafexamples-gtvgにあります 。
2.1食料品店のウェブサイト
Thymeleafでのテンプレートの処理に関連する概念をよりよく説明するために、このチュートリアルでは、プロジェクトWebサイトからダウンロードできるデモアプリケーションを使用します。
このアプリは、架空の仮想食料品店のウェブサイトであり、Thymeleafの多くの機能を示す多くのシナリオを提供します。
まず、アプリケーション用のモデルオブジェクトの簡単なセットが必要です。これは、注文を通じて顧客に販売される製品です。 製品のコメントも管理します。
また、アプリケーションには、次のようなメソッドを含むServiceオブジェクトで構成される非常に単純なサービスレベルがあります。
public class ProductService { ... public List<Product> findAll() { return ProductRepository.getInstance().findAll(); } public Product findById(Integer id) { return ProductRepository.getInstance().findById(id); } }
Webレベルでは、アプリケーションに、リクエストURLに応じてThymeleaf対応コマンドの実行を委任するフィルターがあります。
private boolean process(HttpServletRequest request, HttpServletResponse response) throws ServletException { try {
IGTVGControllerのインターフェース:
public interface IGTVGController { public void process( HttpServletRequest request, HttpServletResponse response, ServletContext servletContext, ITemplateEngine templateEngine); }
あとは、IGTVGControllerインターフェイスを実装するだけです。IGTVGControllerインターフェイスは、サービスにデータを要求し、IGTemplateEngineオブジェクトを使用してテンプレートを処理します。
最後に、次のようになります。
2.2テンプレートエンジンの作成と設定
フィルターのプロセス(...)メソッドには次の行が含まれます。
ITemplateEngine templateEngine = this.application.getTemplateEngine();
つまり、GTVGApplicationクラスは、Thymeleafアプリケーションで最も重要なオブジェクトの1つであるTemplateEngineのインスタンス(ITemplateEngineインターフェースの実装)の作成と構成を担当します。
org.thymeleaf.TemplateEngineオブジェクトが初期化されます。
public class GTVGApplication { ... private final TemplateEngine templateEngine; ... public GTVGApplication(final ServletContext servletContext) { super(); ServletContextTemplateResolver templateResolver = new ServletContextTemplateResolver(servletContext);
TemplateEngineオブジェクトをカスタマイズするには多くの方法がありますが、現時点では、これらの数行のコードから必要な手順について十分な情報が得られます。
テンプレートリゾルバテンプレートリゾルバから始めましょう。
ServletContextTemplateResolver templateResolver = new ServletContextTemplateResolver(servletContext);
テンプレートリゾルバーは、org.thymeleaf.templateresolver.ITemplateResolverと呼ばれるThymeleaf APIからのインターフェイスを実装するオブジェクトです。
public interface ITemplateResolver { ... public TemplateResolution resolveTemplate( final IEngineConfiguration configuration, final String ownerTemplate, final String template, final Map<String, Object> templateResolutionAttributes); }
これらのオブジェクトは、テンプレートの使用方法を決定する役割を果たします。このGTVGアプリケーションでは、org.thymeleaf.templateresolver.ServletContextTemplateResolverは、存在するアプリケーションレベルjavax.servlet.ServletContextで、サーブレットコンテキストからテンプレートファイルをリソースとして抽出することを意味します。すべてのJava Webアプリケーションで、Webアプリケーションのルートからリソースを解決します。
しかし、パターン認識エンジンについて言うことができるのはそれだけではありません。パターン認識エンジンにいくつかの構成パラメーターを設定できるからです。 まず、テンプレートモード:
templateResolver.setTemplateMode(TemplateMode.HTML);
HTMLはServletContextTemplateResolverのデフォルトのテンプレートモードですが、コードドキュメントで何が起きているかを明確に示すために、とにかくセットアップすることをお勧めします。
templateResolver.setPrefix("/WEB-INF/templates/"); templateResolver.setSuffix(".html");
接頭辞と接尾辞はテンプレートの名前を変更し、使用される実際のリソースの名前を取得するためにエンジンに渡します。
この構成を使用すると、テンプレート名「product / list」が一致します。
servletContext.getResourceAsStream("/WEB-INF/templates/product/list.html");
オプションですが、分析されたテンプレートがキャッシュ内に存在できる時間は、cacheTTLMsプロパティを使用してテンプレートリゾルバーで構成されます。
templateResolver.setCacheTTLMs(3600000L);
最大キャッシュサイズに達すると、テンプレートはTTLに達する前にキャッシュから消えることがあり、これが最も古いレコードです。
キャッシュの動作とサイズは、ICacheManagerインターフェイスを実装するか、StandardCacheManagerオブジェクトを変更してデフォルトのキャッシュを管理することにより、ユーザーが定義できます。
テンプレートリゾルバについてはまだ多くのことを言うことができますが、テンプレートエンジンオブジェクトの作成に戻りましょう。
テンプレートエンジンテンプレートエンジンオブジェクトは、org.thymeleaf.ITemplateEngineインターフェースの実装です。 これらの実装の1つがThymeleafコアによって提案されています:org.thymeleaf.TemplateEngine、およびそれをインスタンス化します:
templateEngine = new TemplateEngine(); templateEngine.setTemplateResolver(templateResolver);
シンプルでしょ? 必要なのは、インスタンスを作成し、そのテンプレートリゾルバを設定することだけです。
テンプレートリゾルバは、TemplateEngineが必要とする唯一の必須パラメータですが、後で説明する他の多くのもの(メッセージリゾルバ、キャッシュサイズなど)があります。 これまでのところ、必要なのはそれだけです。
これでテンプレートモジュールの準備ができました。Thymeleafでページの作成を開始できます。
継続する。 第3章テキストの使用