3

私の 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 クラスも存在します。しかし、このクラスを使用する必要があるかどうか、またどのように使用する必要があるかは私にはわかりません。

いくつかの明確化と、おそらく統合の例を期待しています:)

4

0 に答える 0