Thymeleafチュートリアル:第15章構成の詳細

目次



15構成の詳細



15.1リゾルバーテンプレート



Thymes仮想食料品店では、ServletContextTemplateResolverと呼ばれるITemplateResolverの実装を選択しました。これにより、サーブレットコンテキストからリソースとしてテンプレートを取得できました。



Thymeleafには、独自のテンプレートリゾルバーを作成し、ITemplateResolverを実装する機能を提供することに加えて、すぐに使用できる4つの実装が含まれています。





事前定義されたすべてのITemplateResolver実装により、以下を含む同じ構成パラメーターのセットを使用できます。





Thymeleaf + Spring統合パッケージは、Springインフラストラクチャ全体を使用してアプリケーション内のリソースにアクセスして読み取るSpringResourceTemplateResolver実装を提供します。これは、Spring対応アプリケーションでの推奨実装です。



リゾルバテンプレートのチェーン



さらに、パターンエンジンはいくつかのパターンファインダを指定できます。この場合、パターンを検索する順序を設定できるため、最初のパターンファインダがパターンを見つけられない場合、2番目のパターンファインダが要求されます。



 ClassLoaderTemplateResolver classLoaderTemplateResolver = new ClassLoaderTemplateResolver(); classLoaderTemplateResolver.setOrder(Integer.valueOf(1)); ServletContextTemplateResolver servletContextTemplateResolver = new ServletContextTemplateResolver(servletContext); servletContextTemplateResolver.setOrder(Integer.valueOf(2)); templateEngine.addTemplateResolver(classLoaderTemplateResolver); templateEngine.addTemplateResolver(servletContextTemplateResolver);
      
      





複数のリゾルバーテンプレートを使用する場合、Thymeleafがパターンを検索するように設計されていないこれらのパターンリゾルバーをすばやく元に戻し、パフォーマンスを向上できるように、パターン認識ツールごとにパターンを指定することをお勧めします。 これは要件ではありませんが、推奨事項です。



 ClassLoaderTemplateResolver classLoaderTemplateResolver = new ClassLoaderTemplateResolver(); classLoaderTemplateResolver.setOrder(Integer.valueOf(1)); //         ,     classLoaderTemplateResolver.getResolvablePatternSpec().addPattern("/layout/*.html"); classLoaderTemplateResolver.getResolvablePatternSpec().addPattern("/menu/*.html"); ServletContextTemplateResolver servletContextTemplateResolver = new ServletContextTemplateResolver(servletContext); servletContextTemplateResolver.setOrder(Integer.valueOf(2));
      
      





これらの解決可能なテンプレートが指定されていない場合、作成する各ITemplateResolver実装の特定の機能に依存します。 すべての実装が解決する前にテンプレートの存在を決定できるわけではないため、テンプレートを常に解決可能と見なし、検索チェーンを中断することができることに注意してください(他のリゾルバが同じテンプレートをチェックするのを防ぎます)。



Thymeleafカーネルの一部であるITemplateResolverのすべての実装には、リゾルバーがリソースを見つける前に存在するかどうかを本当にチェックすることを強制できるメカニズムが含まれています。 これはcheckExistenceフラグで、次のように機能します。



 ClassLoaderTemplateResolver classLoaderTemplateResolver = new ClassLoaderTemplateResolver(); classLoaderTemplateResolver.setOrder(Integer.valueOf(1)); classLoaderTempalteResolver.setCheckExistence(true);
      
      





このcheckExistenceフラグにより​​、リゾルバーは検索フェーズ中にリソースの存在を実際に確認するよう強制します(現在のチェックがfalseを返す場合、チェーン内で次の検索を実行します)。 これは良い解決策のように思えるかもしれませんが、ほとんどの場合、リソース自体への二重アクセスを意味し(存在を確認するために一度、それを読むために別の時に)、たとえば「リモート」テンプレートベースのリソースのパフォーマンスの問題になるURLは潜在的なパフォーマンスの問題であり、いずれにしてもテンプレートキャッシュを使用することで大幅に軽減できます(この場合、テンプレートは最初にアクセスしたときにのみ検索されます)。



15.2メッセージリゾルバー



GroceryアプリケーションのMessage Resolver実装を明示的に指定しなかったため、前述のように、これは使用される実装がorg.thymeleaf.messageresolver.StandardMessageResolverオブジェクトであることを意味していました。



StandardMessageResolverはIMessageResolverインターフェイスの標準実装ですが、必要に応じて独自のアプリケーションを作成し、アプリケーションの特定のニーズに適合させることができます。



Thymeleaf + Spring統合パッケージは、標準のSpringメソッドを使用して、Spring Application Contextで宣言されたMessageSourceコンポーネントを使用して外部メッセージを受信するIMessageResolverのデフォルト実装を提供します。



標準メッセージリゾルバー



それでは、特定のテンプレートによって要求されたメッセージのStandardMessageResolverはどのように見えますか?



テンプレート名が「home」で、/ WEB-INF / templates / home.htmlにあり、要求された言語がgl_ESである場合、このリゾルバーは次のファイル内のメッセージを次の順序で検索します。



  /WEB-INF/templates/home_gl_ES.properties /WEB-INF/templates/home_gl.properties /WEB-INF/templates/home.properties
      
      





完全なメッセージ検索エンジンの動作の詳細については、StandardMessageResolverクラスのJavaDocドキュメントを参照してください。



メッセージファインダーの設定



テンプレートエンジンにメッセージ変換ツール(またはそれ以上)を追加する場合はどうなりますか? これは簡単です:



 //    templateEngine.setMessageResolver(messageResolver); //     templateEngine.addMessageResolver(messageResolver);
      
      





そして、なぜ複数のメッセージファインダーが必要なのでしょうか。 テンプレートファインダと同じ理由で、メッセージオーガナイザーが注文され、最初のメッセージが特定のメッセージを見つけられない場合、2番目が要求され、3番目が要求されます。



15.3変換サービス



ダブルブラケット構文($ {{...}})を使用してデータ変換とフォーマット操作を実行できる変換サービスは、実際にはThymeleafテンプレートエンジン自体ではなく、標準の方言の要素です。



したがって、それを構成する方法は、テンプレートエンジンで構成されているStandardDialectインスタンスでIStandardConversionServiceインターフェイスのユーザー実装を直接構成することです。 詳細:



 IStandardConversionService customConversionService = ... StandardDialect dialect = new StandardDialect(); dialect.setConversionService(customConversionService); templateEngine.setDialect(dialect);
      
      





thymeleaf-spring3およびthymeleaf-spring4パッケージにはSpringStandardDialectが含まれており、この方言はIStandardConversionServiceの実装で事前構成されており、ネイティブSpring変換サービスインフラストラクチャをThymeleafに統合していることに注意してください。



15.4ロギング



Thymeleafはイベントロギングに細心の注意を払い、常にロギングインターフェースを介して最大限の有用な情報を提供しようとします。



使用されるロギングライブラリはslf4jです 。これは、アプリケーションで使用できるロギング実装(log4jなど)へのブリッジとして実際に機能します。



Thymeleafクラスでは必要な詳細レベルに応じてTRACE、DEBUG、およびINFOデータが書き込まれ、一般的なログに加えて、TemplateEngineクラスに関連付けられた3つの特別なレジストラを使用します。





log4jを使用したThymeleafロギングインフラストラクチャの構成例は次のとおりです。



 log4j.logger.org.thymeleaf=DEBUG log4j.logger.org.thymeleaf.TemplateEngine.CONFIG=TRACE log4j.logger.org.thymeleaf.TemplateEngine.TIMER=TRACE log4j.logger.org.thymeleaf.TemplateEngine.cache.TEMPLATE_CACHE=TRACE
      
      






All Articles