12

Freemarker と Java 構成を使用して Spring MVC アプリケーションを作成しようとしています。

私は JSP の使用に慣れていますが、このプロジェクトで Freemarker を試してみようと思いました。

依存関係として Freemarker を追加しました。jar は Maven によってダウンロードされています。

        <dependency>
        <groupId>org.freemarker</groupId>
        <artifactId>freemarker</artifactId>
        <version>2.3.20</version>
    </dependency>

Spring の 3.2.3.RELEASE バージョンを使用しようとしています。

同様の質問を読んで組み立てられた私のMVC構成:

@ComponentScan(basePackages="yhj.*")
@EnableWebMvc
public class MvcConfiguration extends WebMvcConfigurerAdapter{


@Bean
public ViewResolver viewResolver() {
    FreeMarkerViewResolver resolver = new FreeMarkerViewResolver();
    resolver.setCache(true);
    resolver.setPrefix("");
    resolver.setSuffix(".ftl");
    return resolver;

}

@Bean
public FreeMarkerConfigurer freemarkerConfig() {
    FreeMarkerConfigurer result = new FreeMarkerConfigurer();
    result.setTemplateLoaderPath("/WEB-INF/views/");
    return result;

}
}

これを実行しようとすると、コンパイル エラーが発生します。私の IDE は、メソッド 'setTemplateLoaderPath(String)' を解決できないと言っています。

それで... FreemarkerでSpring MVCを構成する正しい方法のように見えますか? それが問題である場合、POM にどのような依存関係を追加する必要がありますか?

4

4 に答える 4

14

Spring Boot 1.0.2、Spring 4.0.3、および FreeMarker 2.3.20 に対する私のソリューションは、次のクラスでした。

@Configuration
public class MvcConfigurer extends WebMvcConfigurerAdapter {
  @Bean
  public ViewResolver viewResolver() {
    FreeMarkerViewResolver resolver = new FreeMarkerViewResolver();
    resolver.setCache(true);
    resolver.setPrefix("");
    resolver.setSuffix(".ftl");
    resolver.setContentType("text/html; charset=UTF-8");
    return resolver;
  }

  @Bean
  public FreeMarkerConfigurer freemarkerConfig() throws IOException, TemplateException {
    FreeMarkerConfigurationFactory factory = new FreeMarkerConfigurationFactory();
    factory.setTemplateLoaderPath("classpath:templates");
    factory.setDefaultEncoding("UTF-8");
    FreeMarkerConfigurer result = new FreeMarkerConfigurer();
    result.setConfiguration(factory.createConfiguration());
    return result;
  }
}

pom.xmlさらに、質問と DaFoot 自身の回答と同じ変更が必要です。

于 2014-04-30T13:41:10.000 に答える
5
@Bean(name = "freeMarkerViewResolver")
    public FreeMarkerViewResolver getFreeMarkerViewResolver() { 
        FreeMarkerViewResolver resolver = new FreeMarkerViewResolver();
        resolver.setPrefix("/WEB-INF/views/json/");
        resolver.setSuffix(".json");
        resolver.setOrder(2);
        resolver.setContentType("application/json");
        resolver.setCache(true);
        return resolver;
    }

    @Bean(name = "freemarkerConfig")
    public FreeMarkerConfigurer getFreemarkerConfig() throws IOException, TemplateException { 
        FreeMarkerConfigurer result = new FreeMarkerConfigurer();
        result.setTemplateLoaderPaths("/"); // prevents FreeMarkerConfigurer from using its default path allowing setPrefix to work as expected
        return result;
    }
于 2015-03-21T20:50:21.110 に答える