私の Spring MVC プロジェクトでは、Tiles を使用して冗長なページ構造コードを排除しています。ビュー レンダラーとして、私が最初に選んだのは Thymeleaf でした。これは、有望な新しい子供であり、非常に使いやすいと説明されていたからです。残念ながら、Thymeleaf と Tiles の統合は非推奨の Spring (Tiles2) クラスに依存しており、さらに唯一の Thymeleaf フォーラムはほとんど活動しておらず、ほとんどの質問は未回答のままです。
したがって、確立されたユーザー コミュニティがあり、Spring でもサポートされている Freemarker に切り替えたいと考えています。しかし、統合されたSpring MVC、Tiles3、およびFreemarkerの構成は明らかに文書化されておらず、インターネット上のほとんどの例はJSPまたはタイルなしのFreemarkerと組み合わせてタイルを使用していますが、明確で機能する統合された例を見つけることができません.
Spring MVC と構成の経験はあまりありませんが、次の問題に対処する必要があると思います。
-タイル定義ファイルの読み込み。いくつかの例によると、MvcConfig クラスの次のメソッドを使用して実行できます。
@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "nl.drsklaus.activiteitensite.web")
public class MvcConfig extends WebMvcConfigurerAdapter {
...other methods
@Bean
public TilesConfigurer tilesConfigurer() {
TilesConfigurer tc = new TilesConfigurer();
tc.setDefinitions(new String[] {"/WEB-INF/views/tiles/defs/tiles-defs.xml"});
return tc;
}
}
-コントローラーメソッドからタイル定義への戻り文字列の解決:
これは、MvcConfig クラスの次のメソッドを使用して行う必要があります。
@Bean
public ViewResolver tilesViewResolver() {
TilesViewResolver viewResolver = new TilesViewResolver();
viewResolver.setViewClass(TilesView.class);
// viewResolver.setOrder(1);
return viewResolver;
}
私の最初の質問は、このタイル ビュー リゾルバーが何らかの形で「フリーマーカー対応」であるべきかどうかです。Tiles のドキュメントによると、属性 'type="freemarker"' をタグと Tiles 定義 XML ファイルのタグに追加する必要がありますが、その効果は不明です。さらに、これらの put-attribute タグの value 属性で参照されるフラグメントは、JSP ではなく Freemarker テンプレートとして解析する必要があります。これをどのように構成する必要があるかわかりません。
実際、Spring のタイル フラグメントからのルックアップ/解決プロセスがどのように機能するかは不明です。Spring が Freemarker テンプレートを探す必要があることを知るには、拡張子 .ftl で十分ですか?
いくつかの例では、次のようなコード フラグメントを示します。
@Bean
public FreeMarkerConfigurer freemarkerConfigurer() {
FreeMarkerConfigurer configurer = new FreeMarkerConfigurer();
configurer.setTemplateLoaderPath("/WEB-INF/views/freemarker");
configurer.setDefaultEncoding("utf-8");
return configurer;
}
この方法は、Spring MVC がタイル定義から Freemarker テンプレートをロードするのに十分ですか? Spring は、Tiles によって参照されるテンプレートが実際には Freemarker テンプレートであることをどのように「認識」しますか? UrlBasedViewResolver を拡張する FreeMarkerViewResolver クラスも存在します。しかし、このクラスを使用する必要があるかどうか、またどのように使用する必要があるかは私にはわかりません。
いくつかの明確化と、おそらく統合の例を期待しています:)